2012-04-23 4 views
0

У меня есть 2 поля выбора с параметрами, связанными из хранилища данных с прокси-сервером JSONP. Мне нужно изменить значение во втором поле выбора на основе значения, выбранного в первом поле выбора. Для этого я думаю, что мне нужно изменить параметры в прокси-серверы на основе значения, выбранного в поле выбора.Sencha Touch 2.0 динамически меняет хранилище данных extraParams

Я пробовал метод .getProxy() из этого сообщения How can I change/add params on a store, но это не работает. У меня ошибка в консоли:

Uncaught TypeError: Object function() { 
        return this.constructor.apply(this, arguments); 
       } has no method 'getProxy' 

См. Ниже приведенный код с пояснениями. Любые идеи, как это сделать?

Модель:

Ext.define('Providers.model.Provider', {  
extend: 'Ext.data.Model',  
config: {  
    fields: [ 
     { 
      name: 'id', 
      type: 'int' 
     }, 
     { 
      name: 'name', 
      type: 'string' 
     } 
    ] 
} 
}); 

первый магазин:

Ext.define('Providers.store.ProvidersType', {  
extend: 'Ext.data.Store', 
config: { 
    model: 'Providers.model.Provider', 
    proxy: { 
     type: 'scripttag', 
     url : 'http://example.com/providers/service.php', 
     extraParams: { 
      action: 'provider_types', 
      username: 'test2', 
      callback: '?',      
      format: 'json'   
     },   
     reader: { 
      type: 'json', 
      rootProperty: 'providers' 
     } 
    },  
    autoLoad: true 
} 
}); 

второй магазин:

Ext.define('Providers.store.Countries', {  
extend: 'Ext.data.Store', 
config: { 
    model: 'Providers.model.Provider', 
    proxy: { 
     type: 'scripttag', 
     url : 'http://example.com/providers/service.php', 
     extraParams: { 
      action: 'countries', 
      username: 'test2', 
      provider_type: 14, //<--- here should be value from first selectfield 
      callback: '?',      
      format: 'json'   
     },   
     reader: { 
      type: 'json', 
      rootProperty: 'countries' 
     },   
    }, 
    autoLoad: true  
} 
}); 

Планировка:

xtype: 'fieldset', 
layout: 'vbox',      
items: [       
    { 
     xtype: 'selectfield', 
     id: 'selectType',   
     cls: 'combobox', 
     store: 'ProvidersType', 
     displayField: 'name', 
     valueField: 'id',       
     listeners: { 
      change: function(field, value) {          
       if (value instanceof Ext.data.Model) { 
        value = value.get(field.getValueField()); 
       } 
       console.log(value); //<-- get value works fine, how insert it in proxy param? 
       //Providers.store.Countries.getProxy().extraParams.provider_type = 10; <-- Do not work 

      } 
     }       
    },       
    { 
     xtype: 'selectfield', 
     id: 'selectCountry', 
     placeHolder: 'Country', 
     cls: 'combobox',       
     store: 'Countries', 
     displayField: 'name', 
     valueField: 'id'        
    } 

] 

Спасибо.

ответ

2

Вы можете создать новый экземпляр магазина и установить его прокси-сервер, а затем сбросить память поля выбора. Вы можете добавить этот код к функции вашего слушателя:

newstore = Ext.create('Providers.store.Countries', {}); 
newstore.setProxy(
    { 
     type: 'scripttag', 
     url : 'http://example.com/providers/service.php', 
     extraParams: { 
      action: 'countries', 
      username: 'test2', 
      provider_type: value, 
      callback: '?',      
      format: 'json'   
     },   
     reader: { 
      type: 'json', 
      rootProperty: 'countries' 
     },   
    } 
); 
newstore.load(); 

countrySelection = Ext.getCmp('selectCountry'); 
countrySelection.setStore(newstore); 
//OR: countrySelection.store = newstore; 
+0

спасибо за ответ @doganerman. Но это не работает корректно, после загрузки приложения у меня есть правильное значение в первом поле select и в «newstore», после изменения selectfield у меня есть правильное измененное значение в selectfield, но перезагрузка «newstore» со старым значением. Пример: после значения загрузки приложения = 10, provider_type = 10; после значения изменения поля выбора = 14, но provider_type still = 10. – Kuzzy