【问题标题】:MVC ExtJS 4, update a store record using record from other storeMVC ExtJS 4,使用来自其他商店的记录更新商店记录
【发布时间】:2014-01-21 01:37:34
【问题描述】:

我有两家商店:

  • 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

但我需要枚举所有字段。

也许,还有其他出路?请帮帮我!

【问题讨论】:

  • I don't use network 是什么意思?你从哪里得到这些数据的?
  • 我的意思是,为了从另一个商店更新一个商店的记录,我不需要互联网。但我使用 i-net 获取所有数据并稍后保存
  • 那么,记录更新后为什么不使用store reload功能呢!
  • 我需要尽量减少对服务器的请求。只是为了在这两个商店之间交换数据

标签: extjs model extjs4 store extjs-mvc


【解决方案1】:

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

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

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

查看this example:它展示了如何在单独的表单中编辑记录,如何配置您的请求(autoSync 和batch 按钮)。您将停用自动同步并使用批处理来最大程度地减少与服务器的往返。

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

【讨论】:

    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 2011-12-24
    • 2012-12-21
    • 2017-02-24
    • 2011-12-30
    • 1970-01-01
    • 2013-11-20
    • 2020-03-02
    相关资源
    最近更新 更多