【问题标题】:ExtJS 4 problems with form updating a new created record in a store - loadRecord updateRecordExtJS 4 表单更新商店中新创建记录的问题 - loadRecord updateRecord
【发布时间】:2011-12-30 07:36:46
【问题描述】:

我在将表单保存到商店时遇到问题。表单加载记录以编辑现有记录,或者为新记录为空白。编辑现有记录可以正常工作。创建一个新的也可以正常工作。如果我想在不关闭并重新打开表单的情况下编辑和更新新创建的记录,我会遇到问题。

我猜问题是商店内记录的id是通过远程服务器分配的。该表单包含模型的副本,并且不会注意到更改的 id。

任何想法如何保持表单和商店同步?

以下代码用于保存:

var basicForm = this.up('form').getForm(),
record = basicForm.getRecord();

if (basicForm.isValid()) {

    if (!record) {
        record = Ext.data.StoreManager.lookup('theModel').add( this.up('form').getForm().getFieldValues())[0];
        basicForm.loadRecord(record);
    } else {
        basicForm.updateRecord(record);
    }
}

【问题讨论】:

  • 您可以在 store 中为 write 事件添加监听器,并更新您在表单中的实例的记录 id。
  • 嘿 VoidMain,我也想过这个问题。 ... var 记录 = 新 app.model.newModel(basicForm.getFieldValues());记录.保存({成功:函数(){console.log(this)}}); ...不幸的是,我仍然得到旧记录而不是具有分配 id 的新更新记录
  • 但是谢谢提示,你知道如何实现它吗?
  • 好的,让我举个简单的例子。

标签: forms extjs extjs4 store extjs-mvc


【解决方案1】:

要继续您的示例,您可以在 store 上监听 write 事件:

var basicForm = this.up('form').getForm(),
record = basicForm.getRecord(), 
store = Ext.data.StoreManager.lookup('theModel'); // We'll add a field for simplicity
store.on('write', onTheModelWrite);

if (basicForm.isValid()) {

    if (!record) {
        record = Ext.data.StoreManager.lookup('theModel').add(this.up('form').getForm().getFieldValues())[0];
        basicForm.loadRecord(record);
    } else {
        basicForm.updateRecord(record);
    }
}

var onTheModelWrite = function(s, o)//Here Ext passes the store and the options passed to save()
{
    record = s.getAt( s.indexOf(record) ); //We use getAt() because we don't know the id
    basicForm.loadRecord(record);
}

当然,你应该把所有这些都放在范围内,但希望你能明白。

【讨论】:

  • basicForm.loadRecord(record) 行出错;我不明白为什么......未捕获的类型错误:无法读取未定义的 Ext.define.loadRecordext-all-dev.js:95393(匿名函数)xyz.js:64 fireext-all-dev.js 的属性“数据” :16807 Ext.define.fireEventext-all-dev.js:21000 Ext.define.onProxyWrite
  • s.getAt(..) 之后?如果它在那里,那么您的“记录”字段可能超出范围,因此商店找不到它,请在 s.getAt 之前添加 console.info(record);,以便您知道那里有什么。
猜你喜欢
  • 2014-01-21
  • 2013-11-20
  • 2014-03-11
  • 2011-09-07
  • 2012-12-21
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多