Javascript 动态模型操作

Javascript 动态模型操作,javascript,extjs,extjs6,extjs6-classic,Javascript,Extjs,Extjs6,Extjs6 Classic,我在谷歌上搜索关于模型操作的最佳实践,显然,在4.x中,您有这个函数(setField,示例) 但在6.x中,这似乎已经消失了。我记得在Sencha论坛上读到,动态模型并不是真正的“最佳实践”,所以这就是为什么它似乎在v6中消失的原因吗 我可以在原型机上做 MyModel.prototype.fields.push(Ext.create('Ext.data.field.Field', { ... })); 但这是最好的方法吗 我们将使用网格,用户可以在其中隐藏列,因此有时,模型验证将不得不更改

我在谷歌上搜索关于模型操作的最佳实践,显然,在4.x中,您有这个函数(
setField
,示例)

但在6.x中,这似乎已经消失了。我记得在Sencha论坛上读到,动态模型并不是真正的“最佳实践”,所以这就是为什么它似乎在v6中消失的原因吗

我可以在原型机上做

MyModel.prototype.fields.push(Ext.create('Ext.data.field.Field', { ... }));
但这是最好的方法吗

我们将使用网格,用户可以在其中隐藏列,因此有时,模型验证将不得不更改。此外,用户定义的字段将按数字、日期、字符串等显示,这取决于它们选择的类型,因此验证也将动态更改


谢谢。

您可以尝试动态定义模型,然后调用
store.setModel()

榜样


这里唯一的问题是,动态模型需要有唯一的名称

您可以先定义
starkModel
,然后使用
model:starkModel,
配置存储。
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' },
]);