2011-02-26 44 views
1

我有一个可编辑的Ext网格面板。它使用了这家商店有一个侦听器触发一个功能时记录被更改:商店在电网更新时触发两次监听器功能

listeners:{ 
    update: someFunction 
    }, 

功能改变了存储一些值,因此该功能再次发射。 有没有办法一次运行该功能? 也许使用另一个监听器?

回答

2

我在函数的开头添加

store.removeListener('update', someFunction); 

在店内改变的价值和实现这一点:到底

store.addListener('update', someFunction); 

也许有更好的办法吗?

1

ExtJS Store有一个suspendEvents方法,它暂停所有事件的触发,以及一个方法,该方法恢复点火事件。我想你可以使用这些,而不是删除和添加监听器 - 在我看来,这将有点“更清洁”的方法。

+0

我不知道为什么,但是,如果使用挂起/恢复事件只有当事件再次手动发射电网的更新,虽然我用suspendEvents(false)/ – lvil 2011-02-26 21:05:55

1

我得到了印象,你的双重火源是在“该功能改变了商店的一些价值”。

我想在EditGridPanel中你可以编辑/更改列A,B,C,D,但是处理器A,C中的变化会对列E等“某些值”进行更改。在你的处理函数(someFunction)确保未来形式的变化,B,C,D不给E ...

我不知道你的代码,并发生了什么在someFunction - >为什么只能猜测

2

审视ExtJS Store documentation,你可能希望看beforesave事件(重点煤矿):

火灾阿sa前被称为行动。一个保存包括销毁记录,更新记录并创建记录

或者您可以使用...

store.addListener('update', someFunction, store, {single: true}); 

...以确保回调函数只需要在下一次update被称为地方。

+0

{single:true}我需要什么,谢谢! – 2012-02-16 15:09:53

1

任何事件可以是只启动一次作为个人所得税将自动与布尔选项真正被删除。使用此acheive它:

// as config 
listeners: { 
    update: {fn: somefunc, single: true } 
} 
// with adListener()/on() 
cmp.on('update', myFunc, scope, { single: true }); 

如果你需要更新大量的项目,只是一个事件来启动,只是用作为mentionned此语法将在内线3/4

真正解决工作suspendEvents()暂停事件触发并resumeEvents()取消暂停。最后只需使用fireEvent()即可。

2

我有同样的问题(使用Ext JS 4.1)。我也看了两个控制器实例问题(可能对某人有所帮助,在这里描述:http://www.sencha.com/forum/showthread.php?179105-Store-loads-amp-duplicates-records-but-API-only-called-once),但在检查并确定我只有一个控制器实例化后,我正在寻找另一个解决方案。

nicolasbui提示适合我。

这里从商店拿走了我的代码:

listeners: { 
    load: function(store, records, success, options) { 
     console.log("Store: load event."); 
    }, 
    scope: this, 
    single: true 
}