2012-01-31 10 views
0

ExtJS 4 Combobox AJAX Storeのバグと思われるものを試しています。Sencha ExtJS 4リンクされたコンボボックスの問題

私は記事でグリッドを持って、各記事サプライヤーカテゴリ、各サプライヤー一定カテゴリに属し募集記事が掲載されています。グリッドをフィルタリングするために、2つのCombos(Select Lists)を配置しました。 サプライヤの場合はの場合はの1つです。これらのコンボはPHPスクリプトからAJAXによって値を取得します。私はこのようなコンボをリンクしようとしたまで

すべてが良い行ってきました:

は、ユーザーがコンボボックスからカテゴリを選択すると、サプライヤー Storeはカテゴリがいることを提供するサプライヤーとリフレッシュします(正常に動作します!) 。

ユーザーは、コンボボックスからサプライヤー、およびカテゴリストアの更新(放火犯と見られるようなリフレッシュは、良いです)を選択します。

カテゴリコンボボックスをもう一度選択すると、ローディングマスクが消えないので、コンボの値を変更できません。

私はテストしましたが、AJAXは正常に動作しています。これは、読み込みマスクのEXTJS 4の問題です。

問題は、両方の方法が起こっている:

A)

1.ユーザーはカテゴリを選択

2.ユーザーは、サプライヤー

3を選択します。ユーザーはカテゴリを選択できません(読み込みマスクは泡立ちません) Y)

AND

B)

ユーザがカテゴリ

3を選択

サプライヤーを選択します。問題は、これらの状況で発生しているようだ

:ユーザーはEDIT

(積載マスクが消えない)サプライヤーを選択することはできません(その逆も:supplier->カテゴリ)

1.ユーザーは

2.ユーザーがカテゴリ

0に変更するカテゴリを選択します3.ユーザーがサプライヤーを選択することはできません(ロードマスクが消えない)

ここでは私のモデルです:ここでは

Ext.define('Category', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      { name: 'name'}, 
      { name: 'id'} 
     ] 
    }); 

    Ext.define('Supplier', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      { name: 'name'}, 
      { name: 'id'} 
     ] 
    }); 

は私の店です:

var categoryStore = Ext.create('Ext.data.Store', { 
     model: 'Category', 
     autoLoad: true, 
     remoteSort: true, 
     proxy: { 
      type: 'ajax', 
      url: 'GetCategorysForSupplier', 
      reader: { 
       type: 'json', 
       root: 'items' 
      }, 
      extraParams: { 
       supplier: 0 
      } 
     } 
    }); 

    var supplierStore = Ext.create('Ext.data.Store', { 
     model: 'Supplier', 
     autoLoad: true, 
     remoteSort: true, 
     proxy: { 
      type: 'ajax', 
      url: 'getSuppliersForCategory.php', 
      reader: { 
       type: 'json', 
       root: 'items' 
      }, 
      extraParams: { 
       category: 0 
      } 
     } 
    }); 

そして、ここに私のコンボです:

var categoryFilterCombo = Ext.create('Ext.form.field.ComboBox', { 
     xtype: 'combo', 
     store: categoryStore, 
     displayField: 'name', 
     valueField: 'id', 
     fieldLabel: 'Category Filter', 
     listeners: { 
      change: function(field,newVal) { 
       if (Ext.isNumeric(newVal)) { 
        supplierStore.proxy.extraParams.category = newVal; 
        articleStore.proxy.extraParams.category = newVal; 
        supplierStore.load(); 
        articleStore.load(); 
       } 
      } 
     } 
    }); 

    var supplierFilterCombo = Ext.create('Ext.form.field.ComboBox', { 
     store: supplierStore, 
     displayField: 'name', 
     queryMode: 'local', 
     valueField: 'id', 
     fieldLabel: 'Supplier Filter', 
     listeners: { 
      change: function(field,newVal) { 
       if (Ext.isNumeric(newVal)) { 
        categoryStore.proxy.extraParams.supplier = newVal; 
        articleStore.proxy.extraParams.supplier = newVal; 
        categoryStore.load(); 
        articleStore.load(); 
       } 
      } 
     } 
    }); 

種類

ダンCearnau

答えて

関連する問題