Javascript ExtJs侦听器
我想让onload事件在我的配置对象上运行 除了我创建Javascript ExtJs侦听器,javascript,extjs,dom-events,Javascript,Extjs,Dom Events,我想让onload事件在我的配置对象上运行 除了我创建 config.listeners={..} (我想这就是我需要的?) this.onload({...}); 我是否使用了正确的配置?(我通常对事件处理一无所知) 在介绍我的编码方式之前,有几件事: 通常我不会将id分配给Ext对象,因为这是一种不好的做法。在极少数情况下,我们只需要ids,除非绝对没有办法不使用id访问对象(我想不出原因) “没有模特就没有商店”的说法是错误的。使用Model是一种很好的做法,但是您可以在没有模型的情况
config.listeners={..}
(我想这就是我需要的?)
this.onload({...});
我是否使用了正确的配置?(我通常对事件处理一无所知)
在介绍我的编码方式之前,有几件事:
id
分配给Ext对象,因为这是一种不好的做法。在极少数情况下,我们只需要id
s,除非绝对没有办法不使用id
访问对象(我想不出原因)Model
是一种很好的做法,但是您可以在没有模型的情况下定义一个Store
,这将帮助您自动创建一个this.load(..
您在代码中提到的实际上是Ext.data.Store
中定义的一个方法,它要求Store
执行load
操作,成功后,Store
将加载您指定的回调
。我认为这不是您提到的load
事件
祝你好运,干杯!在ExtJS活动中,可以通过以下两种方式进行管理: 首先,您可以在配置对象中添加: 其次,您可以使用以下方法:
为了补充Molecular的第一个答案,我经常在我的企业应用程序中使用它,因为它更简洁,更容易阅读 使用总线在应用程序周围传递消息通常更容易
myApp.Bus = new Ext.util.Observable();
myApp.Bus.addEvents(
'myCustomEvent'
);
然后在应用程序中,使用以下命令向总线开火:
myApp.Bus.fireEvent( 'myCustomEvent', {someData: value} );
以及您想在何处收听活动:
... // config
myObj.on('myCustomEvent', function(someData) { doSomething(); }, this);
确保在渲染组件时附加事件。 我的解决方案覆盖了组件的
initEvents()
Ext.define('MyApp.grid.MyGrid', {
extend: 'Ext.grid.Panel',
initEvents: function() {
// attach events here
this.callParent(arguments)
}
});
要解决的问题:(1)我有ID,这样我可以使用StoreManager查找商店。(2)它仍然为您创建模型,而且由于模型定义了数据的外观,这是一个问题(3)为什么?(4)这避免了以后IE不工作(例如,在生产当天,我编写了大量代码,并考虑在IE中实际尝试),在这个意义上,key:value,}仅在IE中中断。(1)有效,但仍然很少(2),如果您提供字段
,则store将根据您的字段定义模型,而无需自定义验证和呈现。(3)因此您不需要在代码中包含所有x=x|{/code>,并且更干净(4)这只是一种个人实践,在ExtJS中被广泛使用。如果你害怕IE问题,请始终缩进并结束你的行或代码。@LionelChan:如何将控制器中的事件处理函数与没有ID的视图元素连接起来?有没有最佳实践?这太棒了…真的太棒了。在上一篇sni中谁是myObj?它可以是任何对象?它可以是自定义类的实例?因为这得到了大量的点击,sencha的一个同事写了一篇关于侦听器的文章。上面的链接改为:在呈现组件时附加事件是不可靠的(从某种意义上说,并非所有组件都有一个呈现事件——我的示例使用了data.store),您的问题也没有真正解决这个问题。
myApp.Bus = new Ext.util.Observable();
myApp.Bus.addEvents(
'myCustomEvent'
);
myApp.Bus.fireEvent( 'myCustomEvent', {someData: value} );
... // config
myObj.on('myCustomEvent', function(someData) { doSomething(); }, this);
Ext.define('MyApp.grid.MyGrid', {
extend: 'Ext.grid.Panel',
initEvents: function() {
// attach events here
this.callParent(arguments)
}
});