【问题标题】:Dynamic model manipulation动态模型操作
【发布时间】:2015-11-13 14:26:58
【问题描述】:

我在谷歌上搜索有关模型操作的最佳实践,显然,在 4.x 中,您拥有此功能(setField,例如 here)。

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

我可以在原型上做

MyModel.prototype.fields.push(Ext.create('Ext.data.field.Field', { ... }));

但这是最好的方法吗?

我们将有用户可以隐藏列的网格,所以有时,模型验证将不得不改变。此外,用户定义的字段将通过数字、日期、字符串等来选择,具体取决于他们选择的类型,因此验证将再次动态变化。

谢谢。

【问题讨论】:

    标签: javascript extjs extjs6 extjs6-classic


    【解决方案1】:

    您可以尝试动态定义模型,然后调用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 上的示例

    这里唯一的问题是您需要为动态模型设置唯一的名称。

    【讨论】:

    • 您可以先定义starkModel,然后使用model: starkModel, 配置存储。
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多