Javascript ExtJs侦听器

Javascript ExtJs侦听器,javascript,extjs,dom-events,Javascript,Extjs,Dom Events,我想让onload事件在我的配置对象上运行 除了我创建 config.listeners={..} (我想这就是我需要的?) this.onload({...}); 我是否使用了正确的配置?(我通常对事件处理一无所知) 在介绍我的编码方式之前,有几件事: 通常我不会将id分配给Ext对象,因为这是一种不好的做法。在极少数情况下,我们只需要ids,除非绝对没有办法不使用id访问对象(我想不出原因) “没有模特就没有商店”的说法是错误的。使用Model是一种很好的做法,但是您可以在没有模型的情况

我想让onload事件在我的配置对象上运行

除了我创建

config.listeners={..}
(我想这就是我需要的?)

this.onload({...});
我是否使用了正确的配置?(我通常对事件处理一无所知)


在介绍我的编码方式之前,有几件事:

  • 通常我不会将
    id
    分配给Ext对象,因为这是一种不好的做法。在极少数情况下,我们只需要
    id
    s,除非绝对没有办法不使用
    id
    访问对象(我想不出原因)
  • “没有模特就没有商店”的说法是错误的。使用
    Model
    是一种很好的做法,但是您可以在没有模型的情况下定义一个
    Store
    ,这将帮助您自动创建一个
  • 如果您有默认值,最好将其放在类属性中
  • 更像是为了一致性,我们以逗号结束一行,而不是以逗号开始
  • 因此,为了清理一下您的代码,我提出了以下代码():

    ExtJS中的事件处理定义和结构都非常好。您可以随时了解有关事件处理的更多信息

    如果您不确定如何编写ExtJS,您可以随时查看他们的源代码并向专家学习

    额外注意事项

    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)
      }
    });