Динамически загружаемый список в sencha touch 2
-
27-10-2019 - |
Вопрос
У меня есть приложение 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
какой идентификатор вашего магазина?