Вопрос

У меня есть приложение Sencha Touch 2.0, которое настроено с макетом карты.Он содержит панель мониторинга со значками, на которые пользователь может нажать, и список клиентов (xtype:"список").Когда приложение загружено, я загружаю все "карточки" в приложении, включая список клиентов, но я не загружаю данные (через прокси), если не задана переменная localStorage.После того, как все загружено, я проверяю, должен ли пользователь входить в систему автоматически, проверяя переменную localStorage.Если они автоматически входят в систему, то мое приложение работает отлично.Если это не так, я показываю им карточку "логин", которая по сути является формой входа в систему.Как только они отправляют этот журнал в форме, я выполняю вызов ajax.Если это возвращается правильно, я отправляю их на карточку "приборная панель".Но перед этим я пытаюсь загрузить список клиентов с помощью ajax-вызова, используя:

var tmpId = { id: example.id };

var cListStore = Ext.create('example.store.CustomerList');
cListStore.getProxy().setExtraParams(tmpid);
cListStore.load();

С помощью приведенного выше кода я вижу, что происходит вызов моего прокси-сервера, и я вижу, что ответ правильный.Однако, когда я вижу панель мониторинга и нажимаю на значок Клиентов, я вижу пустой список.Моя панель инструментов есть, и даже панель индексов в моем списке есть, просто данных нет.Я не уверен, что я здесь делаю не так.Я включаю свой список просмотра, магазин и модель ниже, надеюсь, это поможет всем, кто посмотрит на это:

Ext.define('example.view.CustomerList', {
    extend: 'Ext.Container',
    id: 'customerListContainer',
    xtype: 'customerlist',
    config: {
        layout: 'fit',
        items: [{
            xtype: 'toolbar',
            docked: 'top',
            title: 'Customers',
            items: [{
                xtype: 'button',
                text: 'Home',
                id: 'customerListHomeButton',
                ui: 'back'
            }]
        }, {
            xtype: 'list',
            itemTpl: '<div class="contact">{first_name} <strong>{last_name}</strong>  </div>',
            store: 'CustomerList',
            id: 'customer_list',
            grouped: true,
            indexBar: true
        }]
    }
});

Ext.define('example.store.CustomerList', {
    extend: 'Ext.data.Store',
    id: 'customerListStore',
    requires: ['example.model.CustomerList'],
    config: {
        model: 'example.model.CustomerList',
        sorters: 'last_name',
        /*
         * This actually makes the ajax request
         */
        proxy: {
            type: 'ajax',
            url: '/example/api/customerList.php',
            extraParams: {
                id: example.id
            },
            reader: {
                type: 'json'
            }
        },
        autoLoad: ((example.id > 0) ? true : false), //only fetch the data if we have a id, or else we'll get an error from our api

        /*
         * Set the group headers to the first letter of the last name
         */
        grouper: {
            groupFn: function (record) {
                return record.get('last_name')[0];
            }
        }
    }
});

Ext.define('example.model.CustomerList', {
    extend: 'Ext.data.Model',
    config: {
        /*
         * Define the fields we get back from our ajax request
         */
        fields: [
            'first_name',
            'last_name',
            'address1',
            'address2',
            'city',
            'state',
            'zip_code',
            'phone_daytime',
            'phone_evening',
            'phone_cell',
            'email']
    }
});

Я также попытался поместить StoreID в хранилище списка клиентов, а затем использовать следующий код вместо вызова Ext.create():

Ext.StoreManager.get('storeid').load()

Это привело к тем же результатам.Я мог видеть, что прокси-сервер правильно извлекал данные, но он все еще отображался в моем компоненте списка.

Это было полезно?

Решение

Я разобрался в этом, я удалил эти строки:

var cListStore = Ext.create('example.store.CustomerList');
cListStore.getProxy().setExtraParams(tmpid);
cListStore.load();

и я добавил вместо него следующее:

Ext.getStore('CustomerList').getProxy().setExtraParams(tmpid);
Ext.getStore('CustomerList').load();

По сути, мне не нужно было создавать новый экземпляр моего магазина, один уже был создан, поэтому мне просто нужен был способ идентифицировать его (Ext.getStore), а затем загрузить его.Спасибо всем, кто заглянул в это дело.

Другие советы

Я не эксперт по Sencha Touch 2, но я вижу, что вы настроили свой список на

store: 'CustomerList'

И мне интересно, что CustomerList есть.Разве вы не должны установить для хранилища списка значение customerListStore какой идентификатор вашего магазина?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top