2013-04-01 1 views
0

При попытке загрузить удаленно данные в сеть, я получаю эту ошибку для подполей:Extjs магазин DataModel подполя Null Ошибка

Cannot read property 'id' of null 

Мой DataModel:

Ext.define('ruleDataModel', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      { name: 'id'}, 
      { name: 'createTime', type:'date', dateFormat: 'timestamp', convert:function(v,j){ return (v != null?new Date(v):null);}}, 
      { name: 'discountPercent'}, 
      { name: 'discountAmount'}, 
      { name: 'discountOverSalePriceFlag', type: 'boolean'}, 
      { name: 'minSalePriceTotal'}, 
      { name: 'maxCount'}, 
      { name: 'execOrder'}, 
      { name: 'clearanceIncludedFlag', type: 'boolean'}, 
      { name: 'relatedProductMinCount'}, 
      { name: 'promocodeRuleTypeName', mapping: 'promocodeRuleType.friendlyType'}, 
      { name: 'groupName'}, 
      { name: 'productTypeId', mapping: 'productType.id', defaultValue: ''}, 
      { name: 'productTypeName', mapping: 'productType.name', defaultValue: ''}, 
      { name: 'relatedProductTypeId', mapping: 'relatedProductType.id', defaultValue: ''}, 
      { name: 'relatedProductTypeName', mapping: 'relatedProductType.name', defaultValue: ''} 
     ], 
     idProperty: 'id' 
    }); 

вернулся JSON данные:

{totalCount: 1, root: [{"productType": {"name": 
... 
"relatedProductType":null, 
... 
"execOrder":0,"id":11}]} 

ответ

0

Проверить следующее:

  1. Проверьте пространство имен вашей модели. Это только ruleDataModel или это что-то вроде foo.bar.ruleDataModel?

  2. может быть быть проблемой с вашим json. Существует простой способ проверить правильность json или нет. Сохраните этот json в .json-файле и откройте этот файл в своем браузере. Если браузер может правильно открыть этот json-файл, ваш json будет правильным, иначе нет.

+0

1. Это только ruleDataModel, он отлично работает, когда «relatedProductType» не является нулевым ... 2. Json абсолютно прав, я попробовал его с помощью программы просмотра JSON, и он отображается правильно. 3. В общем случае использование «сопоставления» предотвращает появление ошибки Extjs. однако в этой ситуации я всегда получаю такую ​​же ошибку ... – efirat

0

Для подполей, DataModel должны быть определены таким образом, что:

Ext.define('ruleDataModel', { 
      extend: 'Ext.data.Model', 
      fields: [ 
       { name: 'id'}, 
       { name: 'createTime', type:'date', dateFormat: 'timestamp', convert:function(v,j){ return (v != null?new Date(v):null);}}, 
       { name: 'discountPercent'}, 
       { name: 'discountAmount'}, 
       { name: 'discountOverSalePriceFlag', type: 'boolean'}, 
       { name: 'minSalePriceTotal'}, 
       { name: 'maxCount'}, 
       { name: 'execOrder'}, 
       { name: 'clearanceIncludedFlag', type: 'boolean'}, 
       { name: 'relatedProductMinCount'}, 
       { name: 'promocodeRuleTypeName', mapping: 'promocodeRuleType.friendlyType'}, 
       { name: 'groupName'}, 
       { name: 'productType.id', mapping: 'productType', convert:function(v,j) { console.log(v,j); return (v != null?v.id:"");}}, 
       { name: 'productType.name', mapping: 'productType', convert:function(v,j) { console.log(v,j); return (v != null?v.name:"");}}, 
       { name: 'relatedProductType.id', mapping: 'relatedProductType', convert:function(v,j) { console.log(v,j); return (v != null?v.id:"");}}, 
       { name: 'relatedProductType.name', mapping: 'relatedProductType', convert:function(v,j){ console.log(v,j); return (v != null?v.name:"");}} 
      ], 
      idProperty: 'id' 
     }); 

разница

Right One:

{ name: 'productType.id', mapping: 'productType', convert:function(v,j) { console.log(v,j); return (v != null?v.id:"");}}, 

неправильный:

{ name: 'productTypeId', mapping: 'productType.id', defaultValue: ''} 
Смежные вопросы