0

リモートでデータをグリッドにロードしようとすると、サブフィールドで次のエラーが発生します。

Cannot read property 'id' of null

私のデータモデル:

    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}]}
4

2 に答える 2

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'
        });

違いは

合ってるやつ:

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

間違ったもの:

{ name: 'productTypeId', mapping: 'productType.id', defaultValue: ''}
于 2013-04-01T10:18:43.087 に答える
0

次のことを確認してください。

  1. モデルの名前空間を確認してください。だけですか、それともruleDataModel次のようなものfoo.bar.ruleDataModelですか?

  2. json に問題がある可能性があります。json が正しいかどうかをテストする簡単な方法があります。その json を .json ファイルに保存し、そのファイルをブラウザーで開きます。ブラウザがそのjsonファイルを正しく開くことができれば、あなたのjsonは正しいですが、そうでなければそうではありません。

于 2013-04-01T09:24:53.667 に答える