2011-12-20 4 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) '선택된'리스너가 실행되면 동적으로 추가하려는 상점 구성 요소를 가져 와서 새 레코드를 작성하여 상점에 추가하십시오.

편집 : 이런 식으로 뭔가를 시도 (그 나는 당신이 원하는 무슨 생각을) 코드가 당신이 원하는 정확히 모르겠지만 그것은 당신에게 당신이 어떤 아이디어를 제공해야하기 때문에 정확한되지 않습니다주의 할 필요가.

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"). reset(); 이것은 디버그 모드에서 볼 수 있지만 뷰를 업데이트하지 않는 저장소를 수정합니다. – 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) 

I도 같이 변경되는 B 수정을 찾기. 나는 여기에 대답하고 있으므로 추측이 별도의 질문으로 게시해야한다.