URL динамического магазина Sencha Touch при клике

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

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',

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

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);

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

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

:-)


person Digeridoopoo    schedule 30.11.2011    source источник


Ответы (5)


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

store = Ext.StoreMgr.get('YourStore');
store.setProxy({
    type: 'ajax',
    url: 'http://www.yoururl.com?foo=bar',
});
person M69    schedule 02.02.2012
comment
Я хотел бы добавить, что согласно API getProxy возвращает значения прокси, где setProxy позволяет вам изменять значения. См. документацию по API здесь: docs .sencha.com/touch/1-1/#!/api/Ext.data.Model-method-setProxy - person M69; 02.02.2012

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

Интегрировано в определение магазина через прослушиватель beforeload:

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'
                    }
                });
            }
        }
    }
});
person Thomas    schedule 23.03.2012
comment
Привет, Томас, среди всех решений мне больше всего нравится твое. Не могли бы вы объяснить параметры этого метода: getUrl(parameter1,parameter2)? Я не понимаю, что такое 1-й и 2-й параметры и их типы. - person Franva; 24.04.2014
comment
Привет, Франва, этот метод был просто внутренним помощником для возврата URL-адреса на основе запрошенной страницы и предоставленных заголовков. Вам просто нужно передать туда URL. - person Thomas; 25.04.2014

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

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

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

person user1083290    schedule 06.12.2011

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

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

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

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

aStore.load({
    url: url,
    callback: function (records, operation, success) {
        console.log(records);
    },
    scope: this
})
person Murrah    schedule 09.08.2013