Как мне структурировать данные для Ext.DataView? - PullRequest
0 голосов
/ 24 октября 2011

Подобно этому вопросу , я не могу заставить мой DataView действительно отображать данные. Я пытался реструктурировать свой магазин, но мне кажется, что я что-то упустил. Вот что у меня так далеко:

Приложение, модель, магазин

Ext.regApplication({
    name: 'TestApp',
    launch: function() {
        this.viewport = new TestApp.views.Viewport();
    }
});

TestApp.models.StoreMe = Ext.regModel('TestApp.models.StoreMe', {
    fields: [
        'id',
        'name',
        'age'
    ]
});

TestApp.stores.storeMe = new Ext.data.Store({
    model: 'TestApp.models.StoreMe',
    proxy: {
        type: 'ajax',
        url: 'data.json',
        reader: {
            type: 'json'
        }
    },
    autoLoad: true
});

Просмотр и просмотр данных

TestApp.views.Viewport = Ext.extend(Ext.Panel, {
    fullscreen: true,
    layout: 'card',
    items: [
        {
            id: 'dataView',
            xtype: 'dataview',
            store: TestApp.stores.storeMe,
            itemSelector: 'div.dataViewItem',
            emptyText: 'NO DATA',
            tpl: '<tpl for "."><div class="dataViewItem">ID: {id}<br />Name: {name}<br />Age: {age}</div></tpl>'
        }
    ]
});

JSON

[
    {
        "id": "1",
        "name": "sam",
        "age": "4"
    },
    {
        "id": "2",
        "name": "jack",
        "age": "3"
    },
    {
        "id": "3",
        "name": "danny",
        "age": "12"
    }
]

Есть идеи? Все остальные вопросы, подобные этому, используют Ext.JsonStore, но документы Sencha API говорят, что делать это нужно так.

ОБНОВЛЕНИЕ

Магазин работает нормально. Вот как выглядит TestApp.stores.storeMe.data:

Ext.util.MixedCollection
    ...
    items: Array[3]
        0: c
            data: Object
                age: "4"
                id: "1"
                name: "sam"
        1: c
        2: c
        length: 3
        __proto__: Array[0]
    keys: Array[3]
    length: 3
    ...

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Я идиот. У меня было:

tpl: '<tpl for "."><div class="dataViewItem">ID: {id}<br />Name: {name}<br />Age: {age}</div></tpl>'

Мне нужно было:

tpl: '<tpl for=".">...</tpl>'
1 голос
/ 25 октября 2011

Кажется, у вас нет структуры json с корнем под названием "data"? Попробуйте изменить свой JSON на:

{
    "data": [ {
        "id": "1",
        "name": "sam",
        "age": "4"
    }, {
        "id": "2",
        "name": "jack",
        "age": "3"
    }, {
        "id": "3",
        "name": "danny",
        "age": "12"
    } ]
}

И добавьте строку - root: 'data' - в ваш ридер.

...