Ext.define一个视图和范围

时间:2014-02-10 10:37:15

标签: javascript extjs scope

Ext.define('Myapp.view.itemsBagPanel', {
    extend : 'Ext.panel.Panel',
    ...
    validatorFn:function(item,source,target,isSpecial) {
        return false;
    },
    createValidatorFn:function(item,source) {
        return this.validatorFn(item,source,source,false);
    },
    moveValidatorFn: function(item, source, target) {
       return this.validatorFn(item,source,target,true);
    }

这是我视图的原始框架,现在我需要知道如何从createValidatorFn访问validatorFn。 “这个”似乎不起作用。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

Ext.define('Myapp.view.itemsBagPanel', {
extend : 'Ext.panel.Panel',
...
initComponent   : function() {
    itemsBagPanel = this;    //Declaration
    this.items=[{....}];
    this.callParent();
}
validatorFn:function(item,source,target,isSpecial) {
    return false;
},
createValidatorFn:function(item,source) {
    itemsBagPanel.validatorFn(); // You can access other functions
    return this.validatorFn(item,source,source,false);
},
moveValidatorFn: function(item, source, target) {
   return this.validatorFn(item,source,target,true);
}

答案 1 :(得分:0)

另一种方式是使用:

Ext.define('Myapp.view.itemsBagPanel', {
    extend : 'Ext.panel.Panel',
    initComponent   : function() {
        var me = this;
        Ext.apply(me,{
            createValidatorFn:function(item,source) {
                return me.validatorFn(item,source,source,false);
            },
            moveValidatorFn: function(item, source, target) {
               return me.validatorFn(item,source,target,true);
            }
        });
    },
    validatorFn:function(item,source,target,isSpecial) {
        return false;
    }

请注意,您必须在validatorFn之外定义initComponent(或使用对apply的两次调用),因为me.validatorFn必须在createValidatorFn之前定义}和moveValidatorFn可以使用它们。