URL динамического магазина Sencha Touch при нажатии - PullRequest
3 голосов
/ 30 ноября 2011

Я бы хотел, чтобы мой магазин в Sencha touch загружал другой файл PHP в зависимости от того, какой элемент в моей карусели был выбран. Каждому предмету в моей карусели назначен элемент: {число}. Это мой магазин на данный момент:

var store = new Ext.data.Store({
        model: 'One',
        proxy: {
            type: 'ajax',
            url: '/carousel2store/Carousel 2_files/get-album.php',
            reader: {
                type: 'json',
                root: 'albums'
            }
        },....etc

Я пытался изменить магазин следующим образом: / carousel2store / Carousel 2_files / get-album2.php ', но я бы хотел, чтобы число 2 было динамичным, поэтому оно меняется при нажатии:

var store = new Ext.data.Store({
        model: 'One',
        proxy: {
            type: 'ajax',
            url: '/carousel2store/Carousel 2_files/get-album' + '2' +'.php',
            reader: {
                type: 'json',
                root: 'albums'
            }
        },

Я пытался добавить itemid

url: '/carousel2store/Carousel 2_files/get-album' + '{itemid}' +'.php', and
url: '/carousel2store/Carousel 2_files/get-album' + '{data.itemid}' +'.php',

Но мне пока не повезло. Очень полезный парень на форуме sencha предложил мне попробовать это:

var store = new Ext.data.Store({
        model: 'One',
        proxy: {
            type: 'ajax',
            url: '/carousel2store/Carousel 2_files/get-album{itemId}.php',
            reader: {
                type: 'json',
                root: 'albums'
            }
        }
    });

    store.proxy.url = store.proxy.url.replace('{itemId}', 1);

    console.log(store);

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

Заранее спасибо

: -)

Ответы [ 5 ]

9 голосов
/ 02 февраля 2012

У меня была несколько похожая проблема, когда мне нужно было динамически изменить URL-адрес моего прокси. Я обнаружил, что это работает особенно хорошо в большинстве случаев, просто убедитесь, что вы правильно обработали последовательность загрузки.

store = Ext.StoreMgr.get('YourStore');
store.setProxy({
    type: 'ajax',
    url: 'http://www.yoururl.com?foo=bar',
});
3 голосов
/ 23 марта 2012

Отличный обходной путь M69!

Интегрировано в определение хранилища через beforeload Listener:

Ext.define('MyApp.store.Accounts', {
    extend: 'Ext.data.TreeStore',

    config: {
        autoLoad: false,

        model: 'MyApp.model.Account',

        scope: this,

        listeners: {
            beforeload: function(store){
                store.setProxy({
                    type: 'ajax',
                    url: MyApp.getUrl('accounts', {token:MyApp.getToken()}),
                    reader: {
                        type: 'json',
                        rootProperty: 'response.accounts'
                    }
                });
            }
        }
    }
});
2 голосов
/ 06 декабря 2011

У меня такой же вопрос с вашим, я решил его следующим образом:

store.getProxy().url = './getnotes?folderName=' + folderName;
store.load();

Я не установил URL в прокси магазина при его определении и установил для autoLoad значение false.

0 голосов
/ 09 августа 2013

Я использовал это успешно. то есть передать URL в операцию загрузки:

var aStore = this.getMyStore(),
    url = 'data/assertions.php';

aStore.load({
    url: url,
    callback: function (records, operation, success) {
        console.log(records);
    },
    scope: this
})
0 голосов
/ 24 декабря 2012

Я надеюсь, что это должно работать .....

var str = Ext.data.StoreManager.lookup('myStoreId');
str.setProxy({
type: 'ajax',
url: 'URL1',
});
...