我有两家商店:
FAQs
- 包含很多我的项目模型FAQ
- 包含一个模型。在观看模式下,我使用FAQs
(查看所有项目),在编辑模式下,我使用FAQ
只处理一个项目,而不是加载所有项目。
完成编辑并保存FAQ
后,我需要在FAQs
中找到该项目并在FAQ
中进行更改。我没有使用网络。
我知道两种方式:
1)在FAQs
中找到所需的记录并将其替换为
_updateFaqsStore: function() {
var faqsStore = Ext.data.StoreManager.lookup("faqs.FAQs");
var activeRec = this.activeRecord;
var index = faqsStore.indexOf( faqsStore.findRecord('id',activeRec.get('id')) ); // index in faqsStore of activeRec
faqsStore.remove(faqsStore.findRecord('id',activeRec.get('id'))); // remove old rec
faqsStore.insert(index, activeRec); // insert new - activeRec
但对象结构不一样(虽然我使用相同的模型)
2)在FAQs
中找到所需记录并在每个字段中设置
var faqsItem = faqsStore.findRecord('id', activeRec.get('id')); // find same item in FAQs store
faqsItem.set("myField", activeRec.get('myField')); // make changes in FAQs as in FAQ
但我需要枚举所有字段。
也许,还有其他方法吗?拜托,帮助我!
答案 0 :(得分:0)
在这种情况下,您不应该使用两个商店。你为什么不只使用一个商店FAQs
?然后选择记录,然后直接编辑它。
对于您的用例,根本不需要使用两个商店。
另外,您说您需要最小化对服务器的请求数。对此没有问题。只需编辑您需要的所有记录,最后一次将所有记录保存到服务器。
查看this example:它显示了如何在单独的表单中编辑记录,如何配置请求(autoSync
和batch
按钮)。您将停用autoSync并使用批次来最小化到服务器的往返。
另见rowediting example。这使您可以更轻松地编辑数据。