在ExtJS 4中使用扩展模型时出错

时间:2013-12-17 10:56:31

标签: extjs extjs4 extjs-stores

我在ExtJS中创建了一个模型,然后创建了另一个扩展第一个模型的模型。在商店中使用第二个模型时,我收到JavaScript错误。

TypeError: this.type.convert is not a function
this.defaultValue = this.type.convert(this.defaultValue);

- 模型 -

Ext.define('myModel.FirstModel', {
    extend: 'Ext.data.Model',
    fields: [

                { name: 'ID' },
                { name: 'Name' },
                { name: 'IsSelected', type: 'bool', defaultValue: false },
                { name: 'IsUpdated', type: 'bool', defaultValue: false },
              ]
});

- 第二个模型 -

Ext.define('myModel.TreeModel', {
    extend: 'myModel.FirstModel',
    fields: [

                { name: 'leaf', type: 'bool', defaultValue: false },
                { name: 'expanded', type: 'bool', defaultValue: false }
    ]
});

- 商店 -

Ext.define('myStore.TreeStore', {
    extend: 'Ext.data.TreeStore',
    requires: ['myModel.TreeModel'],
    model: 'myModel.TreeModel',
    autoLoad: false,
    proxy: {
        type: 'memory'
    }
});

**如果我不从第一个模型延伸,只需将第一个模型的所有字段复制粘贴到第二个模型中。我得到了理想的结果。错误的原因是什么?什么是扩展模型的正确方法**

1 个答案:

答案 0 :(得分:0)

你的方式是......所以,升级你的Ext版本! 4.1.0是我发现的唯一一个关注这个问题的人。

或者您可以通过在代码开头添加此行来解决此问题:

Ext.data.Types.AUTO.convert = function(v) {return v;};

或者您可以通过确保所有继承的字段都采用defaultValueconvert方法来解决此问题:

Ext.define('myModel.FirstModel', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'ID', defaultValue: null },
        { name: 'Name', defaultValue: null },
        { name: 'IsSelected', type: 'bool', defaultValue: false },
        { name: 'IsUpdated', type: 'bool', defaultValue: false },
    ]
});

哦,并且不要犹豫,给你精确的Ext版本,即使你认为它不应该与你的问题有关......一个人永远不会知道!