另一个组合框问题。
在我的表中,大约有 10 个字段是外键,都带有组合框。如何在一个表单中填写所有这些组合,而不需要去服务器 10 次来加载每个组合的存储?
它们是否在后端存储为单独的表?如果是,那么正确的方法是将它们加载到服务器 10 次。您可以通过以下方式优化此方案:
但是您仍然希望在您的 ExtJs 应用程序中有 10 个不同的商店。
如果您想将它们组合成一个商店,请记住几件事
众所周知的问题:) 通常当我有这样的结构时
var data = {
ForeignKeyObjectId: 123,
ForeignKeyObject: {
Id: 123,
SomeValue: 'Some text 1'
},
SomeOtherObjectId: 456,
SomeOtherObject: {
Id: 456,
SomeValue: 'Some text 2'
}
//, ... same 8 times more
}
我必须手动加载每个组合:
var combo1 = this.down('#foreignKeyObjectCombo');
combo1.setValue(data.ForeignKeyObject.Id);
combo1.setRawValue(data.ForeignKeyObject.SomeValue);
combo1.store.loadData([data.ForeignKeyObject], true);
var combo2 = this.down('#someOtherObjectCombo');
combo2.setValue(data.SomeOtherObject.Id);
combo2.setRawValue(data.SomeOtherObject.SomeValue);
combo2.store.loadData([data.SomeOtherObject], true);
// same 8 times more
在我之前关于 ExtJs 3 的一个项目中,我对表单和组合框行为进行了一些覆盖,这样我就可以使用form.getForm().loadData(data)
一次而不是手动设置值,如本例中的 rawValue。但这种方式是隐含的,所以我更喜欢这种方式:)
例子:
模型 1
Ext.create('Ext.data.Store', {
model: 'EmployeeType',
data : [
{type: 1, description: 'Administrative'},
{type: 2, description: 'Operative'},
]
});
模型 2
Ext.create('Ext.data.Store', {
model: 'BloodType',
data : [
{type: 1, description: 'A+'},
{type: 2, description: 'B+'},
]
});
即使您的商店有代理,您也可以禁用 AutoLoad,这样您就可以在一个请求中加载任意数量的文件,如下所示:
手动创建商店:
employeeType = Ext.create('Ext.data.Store', {model: EmployeeType});
bloodType = Ext.create('Ext.data.Store', {model: BloddType});
创建一个 Ajax 请求,您可以在其中一次带来所有组合:
Ext.ajax.request({
url: './catalogs/getalldata',
success: function(response) {
var json = Ext.decode(response.responseText);
employeeType.loadData(json.employeeTypes);
bloodType.loadData(json.bloodTypes);
//...
}
});