我正在尝试编辑一个开源程序(同时学习Extjs),我遇到了一个关于模型的问题。我不想把代码放在这里,因为它太长了但是如果有必要我可以提供。
所以我得到了一个扩展Ext.form.Panel并为其分配模型“PartModel”的类。该模型有一个名为“partNumber”的字符串字段以及许多其他字段。
在此面板中,我想从数据库中的预定义值中选择组合框中的部件号,并将其分配给“partNumber”。
问题是我想分配在组合框中“显示”的值。(不是商店字段之一,我正在使用自定义XTemplate)
我该怎么做?
编辑:添加组合框代码。我认为添加“dataIndex:'partNumber'”就足以完成工作,但这段代码根本不起作用。我可以从组合框中看到Part Numbers字符串,但是当我选择一个并点击“保存”按钮时它不会保存。 (还有很多其他领域与保存按钮配合得很好我可能只需要添加另一个按钮来保存部件号吗?)
{
xtype: 'combobox',
dataIndex: 'partNumber',
fieldLabel: "Part Number",
labelWidth: 150,
flex: 1,
store:{
xtype: 'store',
autoLoad: true,
model: 'PartGroupsClasses',
proxy: getPartGC()},
queryMode: 'local',
renderTo:Ext.getBody(),
tpl:Ext.create('Ext.XTemplate','<tpl for="."><div class="x-boundlist-item">{code}-{descr}-{ccode}-{cdescr}</div></tpl>'),
displayTpl:Ext.create('Ext.XTemplate','<tpl for=".">{code}{descr}{ccode}{cdescr}</tpl>')
}
Edit2:想出保存按钮基本上是调用以下功能。
Ext.override(Ext.data.Model, {
setDataWithAssociations: function(data) {
for (var i in data) {
if (this.fields.containsKey(i)) {
this.set(i, data[i]);
}
if (this.associations.containsKey(i)) {
var store = this[i]();
store.add(data[i]);
}
}
}
});
答案 0 :(得分:0)
我不认为你的问题足够清楚明确答案...... 我不清楚你的目标,但如果你想在商店里展示一些东西并在它背后有文件的价值请看看这个例子是否有帮助
this.data = Ext.create('Ext.data.JsonStore', {fields: ['id', 'data'],
data: [{id: 1, data: 'data1'},
{id: 2, data: 'data2'},
{id: 3, data: 'data3'},
{id: 4, data: 'data4'}]});
xtype:'Combobox',
name:'wtv',
displayField: 'data',
valueField: 'id'
它会显示带有数据的组合,但是如果你得到了选择路径的组合并做了例如
refs: [{
ref:Combo
selector:'Panel Combobox[name=wtv]'
}]
稍后你可以做类似的事情
Panel.getCombo().getValue()
但它不会
返回显示的字段(数据),但它会给出id。
抱歉结构不好!希望它有所帮助
答案 1 :(得分:0)
我会做这样的事情......在你的组合框的模型中,添加一个额外的字段,利用convert
函数来创建你的displayValue,然后在你的组合框中,只需为你的{使用该值{1}}属性。
<强>模型强>
displayValue
<强>组合强>
Ext.define('MyComboModel', {
extend: 'Ext.data.Model',
fields: [
{
name: 'code',
type: 'string'
},
{
name: 'desc',
type: 'string'
},
{
name: 'ccode',
type: 'string'
},
{
name: 'cdesc',
type: 'string'
},
{
name: 'displayValue',
type: 'string',
convert: function(value, record) {
return record.get('code') +
record.get('desc') +
record.get('ccode') +
record.get('cdesc');
}
}
]
});