覆盖Sencha Touch类

时间:2015-06-11 11:28:09

标签: javascript extjs sencha-touch

我正在使用Sencha Touch应用程序,我对此代码有下一个疑问/问题。

manageSetItemConditions: function (button) {
    var matId = button.up('panel'),
    //var matId = button.up('panel').material,
        recordId = button.up('cartItem').getRecordId(),
        record = Ext.getStore('CartItems').getById(recordId),
        conditionsStore = record.setitems().findRecord('material', matId).conditions(),
        orderTypeConditionsStore = this.getCartHeader().down('#headerOrderType').getRecord().sconditions(),
        view = Ext.create('xx.view.cart.Conditions', {
            orderTypeConditionsStore: orderTypeConditionsStore
        });
    //view.setRecordId(record.getId());//TODO: mirar si es necesario
    view.down('dataview').setStore(conditionsStore);
    view.showBy(button);
},

此代码管理从控制器为每个模态窗口创建的按钮。

{{1}}

在这里你可以看到属性“material”但这不是Sencha类中包含的属性,如何在类Panel中添加这个新的配置属性(在本例中)?

我是否需要覆盖类Panel?

此代码在localhost中工作,但在Sencha CMD的生产构建命令行之后,因为该类中未包含材料属性。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以扩展面板类并显式定义材质配置,如下所示。我希望SenchaCmd能够做到这一点。

    Ext.define("my.custom.Panel", {
      extend: 'Ext.Panel',
      alias: 'widget.mycustompanel',

      config: {
          /**
           * @cfg {Object} material
           * Custom configuration for material
           */
          material : undefined
      }
    });

在您的代码中使用如下...

Ext.each(records, function(record){
            newItem = Ext.create('my.custom.Panel', {
                material: record.get('material'),
                // other config
            });
}, this);

答案 1 :(得分:0)

在查看Sencha Touch代码时,我认为您必须将material添加到面板的eventedConfig属性中,因为touch/src/Evented.js中的setter设置如下:

for (name in eventedConfig) {
    if (eventedConfig.hasOwnProperty(name)) {
        nameMap = ExtClass.getConfigNameMap(name);
        data[nameMap.set] = this.generateSetter(nameMap);
    }
}

你无法影响Ext.create中的eventedConfig属性,你必须为此定义一个覆盖,这将影响所有面板:

Ext.define('MyApp.override.Panel',{
    override: 'Ext.panel.Panel',
    constructor:function() {
        this.callParent(arguments);
        this.eventedConfig.material = "SomeDefaultValue";
    }
});

或定义派生类并使用它:

Ext.define('MyApp.ux.Panel',{
    extend: 'Ext.panel.Panel',
    xtype: 'mypanel',
    constructor:function() {
        this.callParent(arguments);
        this.eventedConfig.material = "SomeDefaultValue";
    }
});