2012-04-23 8 views
0

私はJSONPプロキシを使用してデータストアからオプションを選択して2つの選択フィールドを持っています。 最初のselectフィールドで選択された値に基づいて2番目のselectfieldに変更値が必要です。これについては、selectfieldで選択された値に基づいてプロキシextraParamsのパラメータを変更する必要があると思います。Sencha Touch 2.0は動的にデータストアextraParamsを変更します

私はこの記事How can I change/add params on a storeから.getProxy()メソッドを試しましたが、動作しません。コンソールにエラーがあります。

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に感謝します。しかし、それは正しく動作しませんアプリケーションの負荷後、私は最初のselectfieldと "newstore"で正しい値を持っています。selectfieldの変更後、私は正しい値をselectfieldに持っていますが、 "newstore"は古い値でリロードします。例:app load value = 10の後、provider_type = 10; selectfield変更後の値は14ですが、provider_typeはまだ10です。 – Kuzzy

関連する問題