2016-08-23 5 views
0

ExtJs 버전 5.0.0.970을 사용하고 있습니다. 모델과 관련된 설정이있는 Json 파일이 있습니다.ExtJs - 모델 구성이 포함 된 json 파일을 사용하여 Ext.data.Model 인스턴스를 동적으로 만드는 방법

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

가 즉시 위의 코드가 실행될 때 내가 - 내가 다음과 같은 방법으로 동적 모델을 만들려고하고 JSON 이상 사용

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

- JSON 파일의 구조에 따라 콘솔에서 다음 오류가 발생하는 경우 -

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의 객체를 만듭니다. 모델 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)의 'Store in Usage'에서 예를 들어 – Dhananjay

+0

을 찾으십시오. 알았어요. 감사합니다 Dhananjay! –