Перечислите и сохраните привязку ... точно такие же данные - PullRequest
0 голосов
/ 28 января 2012

Я использую sencha для создания карусели с несколькими карточными панелями. Каждая панель содержит компонент списка, который прикреплен к своему собственному экземпляру магазина. Все экземпляры хранилищ списков вызывают один и тот же API для извлечения данных, но с разными параметрами.

Пример: Карта 1, имеет список 1, прикрепленный к магазину 1, который вызывает mywebsite.com/api?node=1 Карта 2, имеет список 2, прикрепленный к магазину 2, который вызывает mywebsite.com/api?node=2

Карта 1 показывает правильный набор узлов, извлеченных из API. Но как только я проведу пальцем, чтобы увидеть карту 2, и список 1, и список 2 показывают те же самые данные, хотя у каждого должны быть свои собственные данные списка.

Код:

Test.data.NodeStore = Ext.extend(Ext.data.Store, {
    constructor : function(config) {
        config = Ext.apply({
            model: 'Test.models.Node',
            autoLoad: false,
            pageSize: 20,
            proxy: {
                type: 'scripttag',
                url: Test.API.URL + '?action=getNodes',
                extraParams: {
                },
                reader: {
                    type: 'json'
                }
            },
            setSource: function(source) {
                if(this.getProxy().extraParams.sourceID != source) {
                    this.getProxy().extraParams.sourceID = source;
                }
            }
        }, config);                 
        Test.data.NodeStore.superclass.constructor.call(this, config);
    }, 

    onDestroy : function(config) {
        Test.data.NodeStore.superclass.onDestroy.apply(this, arguments);
    }
});
Ext.reg('NodeStore', Test.data.NodeStore);

Вид списка:

Test.views.ListView = Ext.extend(Ext.Panel, {
    sourceID: 0,
    layout: {
        type: 'vbox',
        align: 'stretch'
    },
    items: [
        {
            xtype: 'list',
            itemTpl : new Ext.XTemplate("<div class='node'>{title}</div>"),
            store: Ext.create(Test.data.NodeStore, {}),
        }
    ],
    setSource: function(source) {
        this.sourceID = source;
        var store = this.items.get(0).getStore();

        store.setSource(source);

        store.load();
    }
});

Основной вид, который динамически создает представления списка

Test.views.Viewer = Ext.extend(Ext.Carousel, {  
    indicator: false,
    layout: 'card',
    style: {
        padding: '0 20px'
    },
    items: [

    ],
    loadListView: function(listIndex) {
        var currentRecord = Test.stores.ListStore.getAt(listIndex);
        var newList = new Test.views.ListView();
        newList.setSource(currentRecord.get('ID'));

        this.add(newList);
        this.doLayout();

    },
    initComponent: function() {
        Test.views.Viewer.superclass.initComponent.apply(this, arguments);
        loadListView(1);
        loadListView(2);
    }
});

Это действительно странно ... Мне просто интересно, назначает ли Сенча точно такой же магазин, модель, компонент списка ... не знаю, где искать

1 Ответ

0 голосов
/ 28 января 2012

В функции loadListView мне пришлось создать объект хранилища и динамически назначить его списку, а не изменять существующее хранилище.

newList.items.get(0).store = Ext.create(Test.data.NodeStore, {});

...