2011-12-20 6 views
1

itemselectorの右側のマルチセレクションボックスに値を入力する必要があります。 まずは空白にしておき、その上にあるコンボボックスの項目を選択すると、それに応じて値を入力する必要があります。私はこれを試し、現時点ではクラッシュし、何も間違っているように見えません。ここでは、コードスニペットは、次のとおりです。ExtJS Itemselectorのストアに値を動的に割り当てる方法は?

var userList = GetUserList(); 
    var aoiList = GetAOIList(); 
    var userAOIs = ""; 
    var selectedUser="";  

    var userStore = new Ext.data.ArrayStore({ 
       fields: ['user'], 
       data: userList 
      }); 

    var aoiStore = new Ext.data.ArrayStore({ 
     fields: ['aoiList'], 
     data: aoiList 
    }); 
    var userAOIStore = new Ext.data.ArrayStore({ 
     fields: ['userAOIs'], 
     data: userAOIs 
    });  

    var aafp = new Ext.FormPanel({ 
     width : 350, 
     frame : true, 
     autoHeight : true, 
     bodyStyle : 'padding: 2px 5px 0 2px;', 
     labelWidth : 100, 
     defaults : { 
      anchor : '95%', 
      allowBlank : false, 
      msgTarget : 'under' 
     }, 
     items : [ { 
      xtype : 'combo', 
      fieldLabel : 'Choose User', 
      emptyText: "Select User...", 
      id : 'userId', 
      name : 'user', 
      multiSelect: false, 
      store: userStore, 
      displayField: 'user', 
      mode: 'local', 
      editable: false, 
      typeAhead: true, 
      triggerAction: 'all', 
      listeners:{select:{fn:function(combo, value) { 
       selectedUser = value.get('user'); 
       userAOIs = myAOIs(selectedUser);     
       userAOIStore = new Ext.data.ArrayStore({ 
        fields: ['userAOIs'], 
        data: userAOIs}); 
       aafp.getForm().findField("itemselector").reset(); 
       }} 
      }, 
      value : selectedUser 

     },{   
      xtype: 'itemselector', 
      name: 'itemselector', 
      fieldLabel: 'AOISelector', 
      imagePath: 'ext-3.4.0/examples/ux/images/', 
      drawUpIcon:false, 
      drawDownIcon:false, 
      drawTopIcon:false, 
      drawBotIcon:false, 
      multiselects: [{ 
       width: 250, 
       height: 200, 
       store: aoiStore, 
       displayField: 'aoiList'    
      },{ 
       width: 250, 
       height: 200, 
       store: userAOIStore, 
       displayField: 'userAOIs', 
       valueField: 'userAOIs'   
      }] 
    }] 

は当初、私は「aafp.getForm()findField(」itemselector「)を疑った。リセット()」を呼び出し、動的要素をリロードするために他のいくつかの機能があるかもしれないと思いましたフィールドのデータをリセット/消去するのに使用されるかもしれないリセットの代わりにフォームで、しかしリセットは内容を再ロードしています。 これを達成する方法を入力してください。

おかげ

答えて

1

あなたはこれを試すことができます。

1)が店舗を作成します。 2)ストアをコンポーネントに追加する 3)リスナーが選択されたときに、動的に追加して新しいレコードを作成してストアに追加するコンポーネントを取得します。

EDIT: はこのような何かを試してみてください(その私はあなたが欲しいと思うものを)コードは、私はあなたがやりたいことを正確にはよく分からないが、それはあなたかのアイデアを与える必要がありますので、正確ではないことに注意してする必要があります。

listeners:{select:{fn:function(combo, value) { 
       var selectedUser = value.get('user'); 

      var record = Ext.data.Record.create([ 
       'user' : selectedUser 
       ]); 

       var cmp = Ext.getCmp('compId');//Get the comp that contains the store you want to add to put the cmp id here to look it up 
       cmp.store.removeAll();//Clear the store 
      cmp.store.add([record]);//Add the new record into the store 

    }, this} 
+0

私のコードで私はこれを試しました:aafp.getForm()。findField( "itemselector")store = userAOIStore; aafp.getForm()。findField( "itemselector")。リセット();これは、私はデバッグモードで見ることができますが、ビューを更新していないストアを変更しています。 – Shariq

+0

レコードをストアに追加するだけで何をしようとしていますか?私はあなたがコールリセットされている理由を混乱させるのですか? – codemonkeyww

+0

例の助けを借りて説明してください。私の場合、私は店の内容を置き換えなければならないので、私は割り当てていました。そしてリセットは内容に何の影響も与えません、私はそれが起こっていない私のビューを更新するために呼んでいた。 – Shariq

0

入力いただきありがとうございました。

問題が見つかりました:私はExt.data.ArrayStoreの新しいインスタンスを作成していましたが、ビューは以前のインスタンスにリンクされていました。 私は以前のインスタンスを使用し、そのすべてを削除し、新しいレコードを追加しました。thebouldererが提案したように、jus。しかし、私はitemselector storeのハンドルをキャッチする必要はなく、変更されたストアで自動的に更新されていることがわかりました。

サンプル:店舗は非常に緊密私はいくつかの一時ストアにオリジナルを維持したい場合は、それも修正されていることをバインドされて

  var tempUserAOIStore = new Ext.data.ArrayStore({ 
        fields: ['userAOIs'], 
        data: [['8'], ['9']] 
        }); 
      userAOIStore.removeAll(); 
      userAOIStore.add(tempUserAOIStore.getAt(0)); 
      userAOIStore.add(tempUserAOIStore.getAt(1));     

今ArrayStoreでこの施設は私にとっても問題です。すなわち

私がしなければ:

B = A; 

Itemselector: store = A 

A.remove(some records) 

私もAのように変更されているBに変更さを見つけます。私はここに答えているので、これは別個の質問として投稿する必要があります。

関連する問題