2016-08-23 28 views
0

我正在使用ExtJs版本5.0.0.970。我有一个Json文件,它具有与模型相关的配置。以下是JSON文件的结构 -ExtJs - 如何使用包含模型配置的json文件动态地创建Ext.data.Model的实例

{ 
     "model": { 
       "requires": ["Ext.data.Field"], 
       "fields": [ 
           { 
            "name" : "carName", 
            "mapping" : "carName" 
           }, 
           { 
            "name" : "carPrice.currency", 
            "mapping" : "carPrice.currency" 
           } 
          ] 
       } 
    } 

使用上面的Json我试图通过以下方式动态地创建一个模型 -

//gridModelJsonData variable contains the content of json.model object 
Ext.create("Ext.data.Model",gridModelJsonData); 

只要上面的代码行执行我是在控制台中出现跟随错误 -

Model.js?_dc=1471922882661:2367 Uncaught TypeError: Cannot read property 'length' of undefined 
Ext.data.Model#rankFields @ Model.js?_dc=1471922882661:2367 
Ext.data.Model#makeInitializeFn @ Model.js?_dc=1471922882661:2824 
Ext.data.Model#constructor @ Model.js?_dc=1471922882661:378 
Ext.data.Model @ Class.js?_dc=1471922882661:29 
Ext.create1 @ VM11599:3create @ ClassManager.js?_dc=1471922882661:1413 

请让我知道如何解决这个问题! 谢谢!

回答

2

你应该定义你的模型的字段(即模型的元数据),然后创建模型:

var jsonData = { 
     "model": {    
       "fields": [ 
           { 
            "name" : "carName", 
            "mapping" : "carName" 
           }, 
           { 
            "name" : "carPrice.currency", 
            "mapping" : "carPrice.currency" 
           } 
          ] 
       } 
    }; 
    Ext.define('CarModel', { //Defining a model, which is like an object 
       extend : 'Ext.data.Model', 
       fields : [      
          {name: 'name', type: 'string'}, 
          {name: 'mapping', type: 'string'} 
          ] 
    }); 

    var gridModelJsonData = jsonData.model; 
    var carModels = []; 
    for(var i =0; i < gridModelJsonData.fields.length; i++) { 
      carModels.push(Ext.create('CarModel', gridModelJsonData.fields[i])); 
    } 
    for(var i =0; i < carModels.length; i++) { 
      console.log('CarModel[' + i + '].name=' + carModels[i].get('name')); 
     console.log('CarModel[' + i + '].mapping=' + carModels[i].get('mapping')); 
    } 

。看到这个fiddle

+0

谢谢Dhananjay! 我有以下两个疑问与您提供的答案有关 - 1.在创建实例之前是否必须定义模型对象。不能我们直接创建对象的Ext.data.Model 2.此外,你已经创建了一个carModels [],我可以将它绑定到Ext.data.Store? –

+0

是的,你不能在5.0.1以下的版本中创建'Ext.data.Model',看到这个[post](https://www.sencha.com/forum/showthread.php?311864-Error-calling- new-Ext.data.Model())。在[docs](https://docs.sencha.com/extjs/5.0.0/Ext.data.Model.html)中搜索“商店中的使用情况”,例如 – Dhananjay

+0

好了。谢谢Dhananjay! –

相关问题