1

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")。reset()」呼び出しを疑って、リセットに使用される可能性のあるリセットの代わりに、フォーム内の要素を動的に再ロードする他の関数があるかもしれないと考えました。 /フィールドのデータを消去しますが、リセットすると内容が再読み込みされます。これをどのように達成できるかについて、ご意見をお聞かせください。

ありがとう

4

2 に答える 2

1

これを試すことができます:

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

編集: このようなことを試してみてください(あなたが望むと思います)コードは正確ではないことに注意してください。正確に何をしたいのかわからないためですが、何をする必要があるかがわかります。

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}
于 2011-12-20T11:51:25.633 に答える
0

ご意見ありがとうございます。参考になりました。

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

サンプル:

            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も変更されていることがわかりました。私はここで答えているので、これを別の質問として投稿する必要があると思います

于 2011-12-22T05:30:40.573 に答える