如何添加一个项目到ExtJS GridPanel而不触发selectionchanged事件



我有一个ExtJS接口,解决了一个问题,我确信人以前有过。我有一个公开项目列表的服务,我需要在GridPanel中显示该列表。这部分还在工作。当我单击其中一个项目时,我处理GridPanel的SelectionModel中的selectionchange事件,并使用它从另一个REST调用加载资源的详细信息。

现在,我希望能够添加一个新项目。这看起来应该很简单,但我想将项目添加到GridPanel,同时清除"detail"字段,以便用户可以输入新的详细信息并保存完整的项目。我有一个Add按钮,它创建一个提示符来输入项目名称。

现在,我将此项目添加到GridPanel的备份数据存储(如果重要的话,使用JsonStore)并使用getSelectionModel().selectLastRow()突出显示它。当然,这会触发selectionchange事件,该事件希望加载(不存在的)项目的详细信息。我尝试使用.purgeListeners(),进行' selectLastRow()调用,然后恢复selectionchange侦听器,但由于某种原因,更改的事件仍然会触发—我实际上在UI中没有任何症状,但我可以在Firebug中看到它正在为项目详细信息进行(失败的)GET调用。

我想阻止这种情况发生,我觉得这应该是一个常见/容易的问题,但我还没能找到一个解决方案。什么是的方式来添加一个新的项目到GridPanel没有你的代码尝试"查找"项目之前,你保存它?

ETA:一位评论者指出,在记录对象上有一个phantom属性,这听起来正是他想要的。但是,当我将项目列表加载为

STORE = new Ext.data.JsonStore({
  autoLoad: true,
  url: 'items'
  method: 'GET',
  storeId: 'store',
  root: 'list',
  remoteSort: false,
  fields: ['name']
});

列表中的所有记录,一旦我加载它们,就标记为phantomphantom不与JsonStore工作吗?我应该换一种方式吗?

再次ETA:好的,找到了。我没有在我的JsonStore构造函数上设置idProperty属性,这意味着记录没有id,这意味着它们总是phantom。现在我的新记录显示phantom,而那些已经在DB没有。啊!

我更愿意这样做,而不干扰我已经设置的事件链或处理程序。

一种简单的方法似乎是这样的-"以某种方式找出在selectionchange侦听器中被选中的记录是否(尚未)是持久的"

"算出"部分可以通过核对记录来完成。

相关内容

  • 没有找到相关文章

最新更新