我正在使用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的生产构建命令行之后,因为该类中未包含材料属性。
谢谢!
答案 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";
}
});