2

我有一个加载了参数的数据视图。我在模板中呈现这些数据。我正在尝试使用相同的数据,其中存在要呈现到网格的嵌套项。

数据如下所示:

{
    "myJson": {
        "name": "abc",
        "type": "faulty",
        "notes": [
            {
                "date": "01-01-1970",
                "note": "test note"
            },
            {
                "date": "01-02-1970",
                "note": "test note 2"
            }
        ]
    }
}

店铺:

proxy: {
                type: 'ajax',
                url: '/api/detail/',
                reader: {
                    type: 'json',
                    root: 'myJson'
                }
            }

模型:

    {
        name:'name',
    },
    {
        name:'type',
    },
    {
        name:'notes',
        mapping:'notes'
    },

模板:

{name} - {type}

这一切都有效。我想做的是使用notes块在网格中显示。问题是我无法让它阅读笔记组。

var notesListView = new Ext.list.ListView({
    store: 'myStore',
    multiSelect: false,
    width:'100%',
    id:'notesList',
    columns: [{
        header: 'Date',
        width: 75,
        dataIndex: 'date'
    },{
        header: 'Note',
        width: 150,
        dataIndex: 'note',
    }]
});

甚至有可能做到这一点吗?还是我需要创建一个新的商店和模型来在网格中使用这组数据?

例如,我尝试在两个模型中映射到 notes.date

name:'note_date',
mapping:'notes.date'

在网格本身

dataIndex:'notes.date'

两者都不起作用。

我也尝试过使用renderer,但这也不起作用,因为它是一个数组

renderer:function(value, metaData, record, rowIndex, colIndex, store){
    var value = value.date;//won't work; it needs an index a la value[0].date
    return value;
}
4

1 回答 1

1

您可以使用您收到的相同数据创建一个嵌套模型。会是这样

Ext.define("JsonModel", {
  extend: 'Ext.data.Model',
  fields: ['name','type'],
  hasMany: [{
      model: 'Note',
      name: 'notes'
  }]
});

Ext.define("Note", {
  extend: 'Ext.data.Model',
  fields: [
      'date',
      'note']
});

这样你就可以像这样访问任何给定记录的孩子

var jsonRecordChildren = jsronRecord.notes()

我刚刚创建的变量 jsonRecordChildren 属于Store类型,因此您可以轻松地将其分配给网格的属性存储。

Ext.create('Ext.grid.Panel', {
  store: selectedRecord.notes(),
  columns: [
      { text: 'Date',  dataIndex: 'date' },
      { text: 'Note', dataIndex: 'note'}
  ],
  renderTo: Ext.getBody()
});

http://jsfiddle.net/alexrom7/rF8mt/2/

于 2013-04-07T02:31:59.497 回答