Extjs开发MVC应用时,可以把store和model类的定义单独放到一个文件。但是Model里面的fields是硬编码写死的,怎么样才能根据从服务器动态获取的数据来生成不同的fields呢。
示例model:
Ext.define('TEST.model.Site', {
    extend: 'Ext.data.Model',
    fields: ['SiteId','Seq','SiteGroup','Name','Department','ExpectedSize', 'Status']
});我尝试通过给Model定义一个init函数来动态修改model的fields,但是store里面如果有多条数据的话,model的init函数竟然会多次执行,向大家请教一下解决办法,非常感谢!EXTJSMVCMODEL

解决方案 »

  1.   

    你的代码呢。。不行直接同步ajax请求获取fields存到一个临时变量中
      

  2.   

    干嘛要动态获取啊。。多写几个model不行么
      

  3.   

    代码如下:
    Ext.define('TEST.model.Status', {
    extend : 'Ext.data.Model',
    fields : [],
    init : function() {
    me = this;
    Ext.Ajax.request({
    url : 'action/GetColumn',
    success : function(response) {
    me.fields = Ext.decode(response.responseText).fields;
    }
    });
    }
    });这个代码的问题是,如果和这个model相关的store有多条数据,init函数就会执行多次,就会多次发送ajax请求。
      

  4.   


    model里面的fields是动态变化的,无法穷举的,所以没办法多写几个Model。
      

  5.   


    model里面的fields是动态变化的,无法穷举的,所以没办法多写几个Model。
    你这里说的Model中的fields是动态变化的,是什么意思:是同一个Model的fields会变化,还是不同的Model的fields不同?要是同一个Model的fields动态变化的话,那就没辙了,谁知道你什么样的数据对应什么样的fields啊,要是不同的Model带有不同的fields,你多写几个Model定义也是可以的,只不过当你的Model较多时,你的Model定义会比较臃肿而已;若是同一个Model,fields确定这种情况的话,那你提供的代码中,在一个Model定义的init方法中,再通过异步请求来获取相应的fields就显得没有意义了你说,请求Model中的fields的方法多次被调用的问题,你维护一个缓存不就可以了么,比如,你请求过的Model放入一个集合中(Ext.util.MixedCollection),每次请求的时候先检查一下你维护的这个集合中有没有,没有的话,在发送请求,不就可以了么其实你动态生成这个Model的话,你把请求不同fields的方法放到Model中不是很好,你单独再创建一个js类,把它抽取出来专门进行维护不是更好么(仅提个建议参考)