ExtJS的4.1.0
更新13年6月6日 :
我已经张贴在煎茶论坛,那里一直没有太大的动作同样的问题。 后或多或少是相同的,但我想我会添加在这里仅供参考。 我仍然渴望听到其他社区成员的什么必须是一个ExtJS的应用非常常见的场景输入! http://www.sencha.com/forum/showthread.php?265358-Complex-Model-Save-Decoupling-Data-and-Updating-Related-Stores
更新13年7月16日(结论?)
在煎茶后获取了很小的讨论。 我已经决定把大部分复杂的负载保存操作的我的应用程序服务器上,懒洋洋地刷新客户端卖场里需要的话。 这样我可以用我自己的数据库的包装,以涵盖所有用一个复杂的域对象关联交易的保存,以保证原子。 如果在保存新Order
包括保存订单的元数据,十大新实例OrderContents
和潜在的其他信息(居住在其他表的地址,一个新的客户在订单创建,等的时间定义)我宁愿发送有效载荷应用服务器上,而不是建立在客户端应用程序代码回调的低俗网站。 其上的一对一的基础相关联的(例如,数据Order
hasOne Address
)在被更新success
的回调Order.save()
操作。 更复杂的数据,如Order
的内容,被懒惰地通过简单地调用处理contentStore.sync()
我觉得这是保证原子没有绝大多数客户端回调的手段
原始帖子内容
鉴于节能协会重型车型的整体令人失望的功能,我已经完全抛弃模型协会在我的应用程序,并依靠检索出相关的数据自己。 这是一切都很好,但遗憾的是没有解决的实际保存数据并更新ExtJS的商店,以反映在服务器上的变化的问题。
举个例子在保存Order
对象,它是由元数据以及OrderContents
即,订单上的部件。 中的元数据的最终Order_Data
在数据库表,而内容全部以最终Order_Contents
其中每一行经由链接到父顺序表order_id
列。
在客户端,检索内容的命令是很容易做到,而无需任何关联: var contents = this.getContentsStore().query('order_id', 10).getRange()
然而,一大缺陷是, 这是在内容记录的是可用铰链OrderContents
ExtJS的商店 ,这如果我使用一个与“主”对象中的数据服务器没有回来协会申请。
当保存的命令,我发送其保持顺序的元数据(例如,日期,订单号,供应商信息等),以及一个的内容阵列中的单个请求。 这些数据都百般挑剔,并保存到相应的表。 这使得足够的意义,我和行之有效的。
一切都很好,直到它从应用服务器返回保存/更新的记录。 由于该请求是通过调用一个发射了OrderObject.save()
有什么告诉OrderContents
商店,新的记录是可用的。 如果我不是记录添加到存储和调用这将被自动处理.sync()
但我觉得这个保存过程复杂,我只想更愿意处理应用程序服务器上的这种分离就更不用说了,节省整个要求是相当不错的,以及。
有没有更好的办法来解决这个问题? 我目前的解决方案如下......
var orderContentsStore = this.getOrderContentsStore();
MyOrderObject.save({
success: function(rec, op){
// New Content Records need to be added to the contents store!
orderContentsStore.add(rec.get('contents')); // Array of OrderContent Records
orderContentsStore.commitChanges(); // This is very important
}
});
通过调用commitChanges()
添加到存储的记录被认为是干净的(非虚,不脏),因此通过商店的不再返回getModifiedRecords()
方法; 这样做是正确的记录不应该传递给应用程序服务器的的事件store.sync()
这种做法似乎只是有点儿马虎/哈克给我,但我还没有想出更好的解决方案?
任何输入/想法是非常感谢!