MVC ExtJS 4,使用来自其他商店的记录更新商店记录

时间:2014-01-03 11:34:14

标签: extjs model extjs4 store extjs-mvc

我有两家商店:

  • 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

但我需要枚举所有字段。

也许,还有其他方法吗?拜托,帮助我!

1 个答案:

答案 0 :(得分:0)

在这种情况下,您不应该使用两个商店。你为什么不只使用一个商店FAQs?然后选择记录,然后直接编辑它。

对于您的用例,根本不需要使用两个商店。

另外,您说您需要最小化对服务器的请求数。对此没有问题。只需编辑您需要的所有记录,最后一次将所有记录保存到服务器。

查看this example:它显示了如何在单独的表单中编辑记录,如何配置请求(autoSyncbatch按钮)。您将停用autoSync并使用批次来最小化到服务器的往返。

另见rowediting example。这使您可以更轻松地编辑数据。