gpt4 book ai didi

javascript - 如何在不触发 selectionchanged 事件的情况下将项目添加到 ExtJS GridPanel

转载 作者:行者123 更新时间:2023-11-29 22:34:59 41 4
gpt4 key购买 nike

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

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

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

我想阻止这种情况发生,我觉得这应该是一个常见/简单的问题,但我一直未能找到解决方案。向 GridPanel 添加新项目的正确方法是什么,而无需您的代码在保存之前尝试“查找”该项目?

预计到达时间:一位评论者指出 Record 对象上有一个 phantom 属性,这听起来正是我们想要的。但是,当我将项目列表加载为

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

所有 列表中的记录,只要我加载它们,就会被标记为 phantomphantom 不能与 JsonStore 一起使用吗?我应该换一种方式吗?

再次预计到达时间:好的,找到了。我没有在我的 JsonStore 构造函数上设置 idProperty 属性,这意味着 Records 没有 id,这意味着它们始终是 phantom。现在我的新记录显示 phantom 而那些已经在数据库中的记录则没有。呜呼!

最佳答案

我宁愿在不弄乱我已经设置的事件链或处理程序的情况下执行此操作。

一个简单的方法似乎是——“以某种方式在 selectionchange 监听器中弄清楚被选择的记录是否是持久的(还)”

“弄清楚”部分可以通过检查 record 来实现.phantom 正如凯文在下面的评论中所建议的那样

关于javascript - 如何在不触发 selectionchanged 事件的情况下将项目添加到 ExtJS GridPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544669/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com