【发布时间】:2011-04-04 21:39:16
【问题描述】:
我有一个 ExtJS 界面来解决我确信 吨 人以前遇到过的问题。我有一个公开项目列表的服务,我需要在 GridPanel 中显示该列表。我有这部分工作。当我单击其中一项时,我会处理 GridPanel 的 SelectionModel 中的selectionchange 事件,并使用它从另一个 REST 调用中加载资源的详细信息。
现在,我希望能够添加一个新项目。这看起来应该很简单,但我想将项目添加到 GridPanel 并同时清除“详细信息”字段,以便用户可以输入新的详细信息并保存完整的项目。我有一个添加按钮,它创建一个输入项目名称的提示。
现在,我将此项目添加到 GridPanel 的后备数据存储区(如果重要,则添加 JsonStore)并使用 getSelectionModel().selectLastRow() 突出显示它。当然,这会触发selectionchange 事件,该事件想要加载(不存在的)项目的详细信息。我已经尝试使用.purgeListeners(),进行`selectLastRow() 调用,然后恢复 selectionchange 监听器,但由于某种原因,更改的事件仍然会触发——我实际上在 UI 中没有任何症状,但我可以在 Firebug 中看到它正在对项目详细信息进行(失败的)GET 调用。
我想阻止这种情况发生,我觉得这应该是一个常见/简单的问题,但我一直无法找到解决方案。将新项目添加到 GridPanel 而不让代码在保存之前尝试“查找”项目的正确方法是什么?
ETA:一位评论者指出,Record 对象上有一个phantom 属性,这听起来正是我们想要的。但是,当我将我的项目列表加载为
STORE = new Ext.data.JsonStore({
autoLoad: true,
url: 'items'
method: 'GET',
storeId: 'store',
root: 'list',
remoteSort: false,
fields: ['name']
});
所有列表中的记录,一旦我加载它们,就会被标记为phantom。 phantom 不能与 JsonStore 一起使用吗?我应该换一种方式吗?
ETA 再次:好的,找到了。我没有在我的 JsonStore 构造函数上设置 idProperty 属性,这意味着记录没有 ID,这意味着它们始终是 phantom。现在我的新记录显示phantom 而那些已经在数据库中的则没有。呜呜!
【问题讨论】:
标签: javascript user-interface extjs gridpanel