2012-02-17 3 views
3

У меня есть приложение Sencha Touch 2.0, которое настроено с использованием макета карты. Он содержит панель инструментов с иконками, которые пользователь может щелкнуть и список клиентов (xtype: 'list'). Когда приложение загружается, я загружаю все «карты» в приложение, включая список клиентов, но я не загружаю данные (через прокси), если не задана переменная localStorage. После того, как все загружено, я проверяю, должен ли пользователь автоматически регистрироваться, проверяя переменную localStorage. Если они автоматически вошли в систему, мое приложение работает отлично. Если это не так, я покажу им карточку «login», которая в основном является формой входа в систему. Как только они отправят эту регистрационную форму, я выполняю вызов ajax. Если это вернется правильно, отправлю их на карточку «приборной панели». Но перед тем, что я пытаюсь загрузить список клиентов с помощью AJAX вызова с помощью:Динамически загружаемый список в sencha touch 2

var tmpId = { id: example.id }; 

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

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

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

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

ответ

5

я понял это, я удалил эти строки:

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

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

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

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

+0

То, что мне нужно! – seedg

0

Я не Сенча Touch 2 эксперт, но я вижу, что вы установите список вашего магазина, чтобы

store: 'CustomerList' 

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

+0

На самом деле у меня нет storeId, идентификатор находится на моем классе магазина. В документации говорится о передаче «экземпляра магазина» после «store:», и я не думаю, что это проблема, потому что если пользователь автоматически регистрируется, список клиентов отлично работает. Спасибо хоть. – jb1785

Смежные вопросы