Построить список из массива объекта sencha touch - PullRequest
0 голосов
/ 03 ноября 2011

Я новичок в Sencha Touch и пытаюсь построить список из массива. Я пользуюсь Ext.data.ArrayStore и испытываю проблемы.

Мой код:

var ListStore = new Ext.data.ArrayStore({       
    autoLoad:myData,    
    autoDestroy: true,
    storeId: 'myStore',
    // reader configs
    idIndex: 0,
    fields: [
       'product',
       {name: 'product', type: 'string'},
       {name: 'id'     , type: 'string'}

    ]       
});

Код панели, которая включает в себя список:

var listPanel = new Ext.Panel({
            dockedItems: [{
                xtype: 'toolbar',
                ui: 'light',
                title: 'Product List',
                items: [{
                    text: 'Back',
                    ui: 'back',
                    handler: backHandler
                }]
            }],
            layout: 'fit',
            scroll: 'vertical',
            style: 'background-color:#FFFFF',
            items: [
            {
                xtype:'list',
                store:ListStore,
                itemTpl: '<div class="product"><strong>{product}</strong></div>',
                grouped:true,
                indexBar:true
            }]

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Прежде всего, Swar ответ кажется совершенно правильным.Создайте подобное хранилище, передайте свои данные в качестве опции конфигурации data при создании экземпляра Ext.data.Store.

Если у вас есть Ext.define() -данный собственный подкласс магазина (без прокси), выВы можете добавить данные, когда вы create() свой экземпляр, например:

Ext.define('MyApp.store.MyStore', {
    extends: 'Ext.data.store',
    model: 'Demo'
});

myStore = MyApp.store.MyStore({data: arrayOfDemoItems});

Или альтернативно, если у вас уже есть экземпляр хранилища (например, автоматически созданный контроллером):

Ext.define('MyApp.controller.MyController',{
    extend: 'Ext.app.Controller',
    stores: ['MyStore'],
    init: function () {
        // You add your items here
        var myStore = this.getMyStoreStore();
        myStore.data.addAll(this.getMyItemsSomehow(););
        // Note that the 'load' event is not fired if you load elements like this,
        // you have to do it manually if you have e.g. a DataView tied to the store:
        myStore.fireEvent('load', myStore);
    },
    getMyItemsSomehow: function () {
        // Return an array of items somehow...
        return [{id: 1, product: 'Spencer'}];
    }
});
1 голос
/ 03 ноября 2011

Сначала создайте модель.

Ext.regModel('Demo', {
    fields: [
        {name: 'id', type: 'string'},
        {name: 'product',  type: 'string'}
    ]
});

Затем создайте магазин:

new Ext.data.Store({
    model: 'Demo',
    data : [
        {id: '1',    product: 'Spencer'}
    ]
});

И насколько я могу понять из вашего кода, в опции Store "autoLoad" он должен быть логическим или объектом, который является не данными, а опциями для метода store load ().

...