2011-12-20 2 views
1

Я должен заполнить значения в правом поле мультиселектора в элементе item. Сначала мне нужно сохранить его пустым, а затем по выбору элемента в поле со списком над ним, я должен заполнить значения соответственно. Я пробовал это и его сбой в данный момент, и ничего не кажется неправильным. Вот фрагмент кода: «сброс()Как динамически присваивать значение магазину в 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, но представление было связано с предыдущим экземпляром. Итак, я использовал предыдущий экземпляр, удалил все из него и добавил новые записи, jus, как предложил 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) 

Я считаю, что В также модифицированный в качестве модифицирован. Я отвечаю здесь, так что угадайте, что нужно опубликовать это как отдельный вопрос.

Смежные вопросы