2

次のような Offering オブジェクトの着信配列があります。

[{
  "id" : 16,
  "price" : 500,
  "quantity" : 2000,
  "denomination" : "case",
  "denominationPlural" : "cases",
  "product" : {
    "id" : 14,
    "description" : "This is the text description for product 14."
  }
}, {
  "id" : 18,
  "price" : 500,
  "quantity" : 1,
  "denomination" : "study",
  "denominationPlural" : "studies",
  "product" : {
    "id" : 17,
    "description" : "This is a text description for product 17."
  }
}]

オファリングは、製品×価格の数量です。

これらのオファリングを GridPanel に表示するだけでなく、ネストされた製品情報もそれらの行に含めたいと考えています。これが私が以前にやっていた方法です:

Ext.define('Offering', {
            extend: 'Ext.data.Model',
            fields: [
                {name: 'id', type: 'number'},
                {name: 'price', type: 'number'},
                {name: 'quantity', type: 'number'},
                {name: 'denomination', type: 'string'},
                {name: 'denominationPlural', type: 'string'},
                {name: 'product.description', type: 'string'},
            ]
        });



var offeringStore = Ext.create('Ext.data.Store', {
             autoDestroy: true,
             model: 'Offering',
             proxy: {
                 type: 'ajax',
                 url: '/offerings',
                 reader: {
                     type: 'json',
                     root: 'success'
                 }
             },
             autoLoad:true
         });

var offeringGrid = Ext.create('Ext.grid.Panel', {
            store: offeringStore,
            columns: [{
                    header: 'id',
                    dataIndex: 'id'
                }, {
                    header: 'price',
                    dataIndex: 'price'
                }, {
                    header: 'quantity',
                    dataIndex: 'quantity'
                }, {
                    header: 'denomination',
                    dataIndex: 'denomination'
                }, {
                    header: 'description',
                    dataIndex: 'product.description'
                },
            };

そして、これはうまくいきました。その後、(ExtJS 4.2.1 から ExtJS 5.1.1 へのアップグレードと Sencha Architect の使用を含む) 途中で壊れてしまいました。

問題 1: Sencha Architect は、「.」について不平を言って、提供モデルで「product.description」のエントリを作成することを妨げます。キャラクター。ただし、「whateveryouwant」として作成する場合は、モデル フィールドに移動して、そこで「product.description」に名前を変更できます。

問題 2: "." を回避した後 アプリケーションを発行して実行すると、「product.description」列のセルが空白になります。

問題 3: JavaScript コンソールでエラーが発生しません。受信データは正常に見えます。

このネストされたデータを表示するにはどうすればよいですか?

4

2 に答える 2

4

私のやり方はとてもシンプルです。mappingこの方法で属性をモデルに追加するだけです:

{
    name: 'product.description', 
    type: 'string',
    mapping : 'product.description'
}

の必要はありませんrenderer

于 2015-06-09T14:27:54.217 に答える