我扩展了Ext.tree.Panel并添加了一个名为“ selectedNodes”的新状态属性,该属性应该保存选中的树节点的状态,并在每次单击节点时更新该状态。问题在于,每当单击该节点时,状态都不会提交给服务器。第一次单击某个节点时,它似乎会触发,其他状态触发(例如,使面板崩溃)会正确触发,甚至会提交选定的节点。客户端状态保存事件触发,但是,如果我观看开发工具的网络流量,则不会调用服务器来提交更改。以下是相关代码:
Ext.define('Common.CheckboxTreePanel', {
extend: 'Ext.tree.Panel',
alias: 'widget.checkboxtreepanel',
stateful: true,
stateId: 'tree',
initComponent: function()
{
this.addEvents('selectednodeschange');
this.addStateEvents('selectednodeschange');
},
getState: function()
{
var state = this.callParent(arguments) || {};
Ext.apply(state, { selectedNodes: this.selected() });
return state;
},
applyState: function(state)
{
this.callParent(arguments);
this.selected(state.selectedNodes, true);
}
});
找到了问题。我覆盖了状态提供程序中的encode / decodeValue方法,该方法通过引用接收状态对象并返回相同的引用,而不是创建对象的副本。返回之前克隆对象解决了该问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句