动态模型操作
Dynamic model manipulation
我在谷歌上搜索有关模型操作的最佳实践,显然,在 4.x 中,您有这个功能(setField
,示例 here)。
但是在6.x,这个好像没有了。我记得在 Sencha 论坛上读到动态模型并不是真正的 'best practices',所以这就是它在 v6 中消失的原因吗?
我可以在原型上做
MyModel.prototype.fields.push(Ext.create('Ext.data.field.Field', { ... }));
但这是最好的方法吗?
我们将拥有用户可以隐藏列的网格,所以有时,模型验证将不得不改变。此外,用户定义的字段将由数字、日期、字符串等组成,具体取决于他们选择的类型,因此验证将再次动态变化。
谢谢。
您可以尝试动态定义模型,然后调用 store.setModel()
。
var starkStore = Ext.create('Ext.data.Store', {
model: Ext.data.Model, // only here to suppress warning
});
var starkModel = Ext.define(Ext.getId(), {
extend: 'Ext.data.Model',
fields: ['id', 'first_name', 'last_name']
});
starkStore.setModel(starkModel);
starkStore.getProxy().getReader().setModel(starkModel);
starkStore.loadData([
{ id: 1, first_name: 'Rob', last_name: 'Stark' },
{ id: 2, first_name: 'John', last_name: 'Snow' },
{ id: 3, first_name: 'Rickon', last_name: 'Stark' },
{ id: 4, first_name: 'Bran', last_name: 'Stark' },
]);
示例 jsfiddle
这里唯一的问题是您需要为动态模型命名。
我在谷歌上搜索有关模型操作的最佳实践,显然,在 4.x 中,您有这个功能(setField
,示例 here)。
但是在6.x,这个好像没有了。我记得在 Sencha 论坛上读到动态模型并不是真正的 'best practices',所以这就是它在 v6 中消失的原因吗?
我可以在原型上做
MyModel.prototype.fields.push(Ext.create('Ext.data.field.Field', { ... }));
但这是最好的方法吗?
我们将拥有用户可以隐藏列的网格,所以有时,模型验证将不得不改变。此外,用户定义的字段将由数字、日期、字符串等组成,具体取决于他们选择的类型,因此验证将再次动态变化。
谢谢。
您可以尝试动态定义模型,然后调用 store.setModel()
。
var starkStore = Ext.create('Ext.data.Store', {
model: Ext.data.Model, // only here to suppress warning
});
var starkModel = Ext.define(Ext.getId(), {
extend: 'Ext.data.Model',
fields: ['id', 'first_name', 'last_name']
});
starkStore.setModel(starkModel);
starkStore.getProxy().getReader().setModel(starkModel);
starkStore.loadData([
{ id: 1, first_name: 'Rob', last_name: 'Stark' },
{ id: 2, first_name: 'John', last_name: 'Snow' },
{ id: 3, first_name: 'Rickon', last_name: 'Stark' },
{ id: 4, first_name: 'Bran', last_name: 'Stark' },
]);
示例 jsfiddle
这里唯一的问题是您需要为动态模型命名。