2012-05-23 53 views
2

我使用ExtJS 4.0.7及其标准的MVC体系结构。我有一个自定义storemodel类的网格。数据通过store.load()远程加载。我使用ext-dev.js进行调试,并使用动态依赖加载。ExtJS 4(MVC)不使用我自定义的模型类

该应用在Chrome控制台中加载正常并没有错误。但问题是我的商店中的记录与我的AJAX调用提供的数据完全相同,无论我的模型中有哪些字段。我甚至尝试过重命名和删除字段,但是Ext没有注意。

使用控制台浏览我的store对象表明记录都具有自己的定制运行时生成模型类,名为Ext.data.reader.Json-Modelext-gen1141。这里是我的代码的要点:

我的模型:

Ext.define('MyApp.model.FooModel', { 
    extend: 'Ext.data.Model', 

    idProperty: 'column1', 
    fields: [ 
     {name: 'column1', convert: function(value, record) { 
      return value + ' TEST-TEST-TEST'; 
     }}, 
     'column2', 
     'column3' 
    ] 
}); 

我的店:

Ext.define('MyApp.store.FooStore', { 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.FooModel', 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: '/blah/blah', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

我的网格:

Ext.define('MyApp.view.FooGrid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'fooGrid', 
    store: 'FooStore', 
    columns: [{ 
     text: 'Column 1', 
     dataIndex: 'column1', 
     flex: 1 
    },{ 
     text: 'Column 2', 
     dataIndex: 'column2', 
     flex: 1 
    },{ 
     text: 'Column 3', 
     dataIndex: 'column3', 
     flex: 1 
    }] 
}); 

我的控制器:

Ext.define('MyApp.controller.Foo', { 
    extend: 'Ext.app.Controller', 
    views: ['FooGridFrame'], 
    models: ['FooModel'], 
    stores: ['FooStore'], 

    init: function() { 
     this.control({ 
      'fooGrid': { 
       activate: function(grid) { 
        grid.getStore().load(); 
       } 
      } 
     }); 
    } 
}); 

我不知道我做错了什么。有任何想法吗?

+0

我找到了答案。我的数据馈送具有指定字段配置的'metaData'属性,显然Store使用这些来生成它自己的模型,而不是我的'FooModel'中的内容。只要SO会允许我,我会尽快写出答案。 – curtisdf

回答

0

事实证明,AJAX后端(由另一个开发人员为Ext3编写的)通过metaData属性提供了一些配置数据。我不知道Ext的Store对此有任何关注。通过更新后端以省略metaData属性解决了我的问题。

它可能也会更新metaData提供我需要的适当的配置,但我重构使所有UI配置发生在客户端。