【问题标题】:Sencha Extjs - Overriding methods properly?Sencha Extjs - 正确覆盖方法?
【发布时间】:2016-04-22 05:27:18
【问题描述】:

我有一个简单的覆盖类。看起来像这样:

Ext.define('Ext.overrides.form.Panel',{
override: 'Ext.form.Panel',
constructor: function() {
    this.callParent(arguments);
},
listeners: {
    afterrender:  {
        fn:function (component, eOpts) {
            var fields = component.getForm().getFields();
            var field =  fields.getAt(0);
            if(typeof field !== 'undefined' && field.isFocusable()) {
                //need to wait before you can focus a field.
                Ext.defer(function() {
                    field.focus(true,200);
                },1);
            }
        }
    }
}

});

如您所见,我正在尝试覆盖 afterRender 事件,以便在呈现表单后表单中的第一个字段将具有焦点。 这有效,除了我的应用程序中的某些表单在 afterrender 事件中为自己实现一些代码。看来他们正在覆盖我上面定义的这个方法。

我可以将这段代码复制到这些表单中,但如果我可以使用类似 this.callParent(arguments); 的方式调用上面的代码,那不是更好吗?以那些形式? 我实际上已经尝试过了,但问题是这些表单的渲染后代码在视图控制器范围内。因此,“this”引用将具有错误的 Ext.Base 范围。

【问题讨论】:

    标签: javascript class extjs overriding


    【解决方案1】:

    这应该可行:

    Ext.define('Ext.overrides.form.Panel',{
      override: 'Ext.form.Panel',
      constructor: function() {
        this.callParent(arguments);
    
        this.on({
          afterrender: function (component, eOpts) {
                var fields = component.getForm().getFields();
                var field =  fields.getAt(0);
                if(typeof field !== 'undefined' && field.isFocusable()) {
                    //need to wait before you can focus a field.
                    Ext.defer(function() {
                        field.focus(true,200);
                    },1);
                }
            }
        });
      }
    });
    

    【讨论】:

    • 抱歉回复晚了。这个答案有效。但是为什么以这种方式添加侦听器而不是使其成为类的初始配置的一部分呢?
    • 我在想这是因为 on() 是 addlistener 的简写,这意味着我们可以为同一个事件添加多个监听器?
    • 如果您在问题中使用listeners,您的某些表单会简单地覆盖它。
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2016-03-07
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多