2013-12-09 6 views
0

Я сравниваю две коллекции массивов, предположительно, collection1 и collection2 и в коллекции 2 У меня есть флажок, что я делаю после нажатия кнопки изменения. Я сравниваю эти две коллекции массива, что я хочу, это то, что есть элемент соответствует соответствующий флажок будет автоматически выбирать ..Как сравнить две коллекции массива в flex, когда она соответствует флажку, проверяется

enter code here 



      for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
     { 
      //loop though the second collection 
      for(var b:String in User360DegreePodCreation.user360PodCreation.fieldList.dataProvider)` 

` { // сравнить коллекцию если (User360DegreePodCreationView.user360PodView.MyArray [а] == User360DegreePodCreation .user360PodCreation.fieldList.dataProvider [b] .columnName) {

    var chkBox:CheckBox =new CheckBox; 
        chkBox = User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName as CheckBox; 

        chkBox.selected=true; 

файл MXML

     <s:List id="fieldList" 
         width="100%" 
         height="170" 
         enabled="{isEnabled}" 
         dataProvider="{model.profileTableColumns}" 
         click="fieldList_clickHandler(event)"> 
        <s:itemRenderer> 
         <fx:Component id="itemRender"> 
          <s:MXItemRenderer> 
           <fx:Script> 
            <![CDATA[ 

            ]]> 
           </fx:Script> 

           <s:CheckBox left="5" 
              label="{data.columnName}" 
              id="chkColumn" 
              /> 
          </s:MXItemRenderer> 
         </fx:Component> 
        </s:itemRenderer> 
       </s:List> 

по нажатию кнопки я сравнивая одну коллекцию массив из DataGrid и один ArrayCollection из списка field..`

   private function modifyBtn_clickHandler(event:MouseEvent):void 
    { 
     User360DegreePodCreation.user360PodCreation.isEnabled=true; 
     User360DegreePodCreation.user360PodCreation.isEditable=true; 
     User360DegreePodCreation.user360PodCreation.displayUpdateButton(); 
     User360DegreePodCreation.user360PodCreation.fieldList.visible=true; 
     User360DegreePodCreation.user360PodCreation.list.visible =false; 
     var userProfile360TableChangeEvent:UserProfile360DegreeTableChangeEvent=new UserProfile360DegreeTableChangeEvent(); 
     userProfile360TableChangeEvent.data.idnId=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.idnId; 
     userProfile360TableChangeEvent.data.dbPath=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.externalRefDBPath; 
     userProfile360TableChangeEvent.data.tableName=User360DegreePodCreation.user360PodCreation.drpTable.selectedItem.tableName; 
     userProfile360TableChangeEvent.successHandler=function():void 
     { 
      if (model.profileTableColumns != null && model.profileTableColumns.length != 0) 
      { 
       User360DegreePodCreation.user360PodCreation.onModify(); 
      } 
     } 
     userProfile360TableChangeEvent.dispatch(); 
     //Loop through the first collection 
     for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
     { 
      //loop though the second collection 
      for(var b:String in User360DegreePodCreation.user360PodCreation.fieldList.dataProvider) 
      { 
       //compare collection 
       if(User360DegreePodCreationView.user360PodView.MyArray[a] == User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName) 
       { 

        var chkBox:CheckBox =new CheckBox; 
        chkBox = User360DegreePodCreation.user360PodCreation.fieldList.dataProvider[b].columnName as CheckBox; 

        //chkBox.selected=true; 


        //User360DegreePodCreation.user360PodCreation.fieldList.selectedItem 


       } 

      } 
     } 
    } 

here is my datgrid arraycollection 


       var MyArray:ArrayCollection = new ArrayCollection(); //DATA ARRAY 
       trace(dgUser360View.selectedItem.podTitle); 
       for each(var objAux:Object in model.userProfile360DegreeViewDetailsVO.userProfile360Details) //FOR TYPE OBJECT 
       { 

        if(objAux.podTitle==dgUser360View.selectedItem.podTitle) 
        MyArray.addItem(objAux.columnNames) //ADD DATA IN ARRAY 

спасибо за ур ответ @ Крис он отлично работает для пары ключевых значений, но мне нужно, чтобы у меня была одна коллекция массивов, динамический тип которой, например, onle, я принимаю какое-то значение, такое как myArray {анализ, id, порт} и во второй коллекции массивов Myaary2 {анализ Флажок, идентификатор флажок, порт флажок, Nuber флажок, адрес флажок} я хочу только согласующее значение коллекции массива получает и непревзойденная элемент остается непроверенной я делюсь с и то, что я сделал до даты

var modifiedProfileColumns:ArrayCollection = new ArrayCollection; 
      /*for(var b:int=0;b<model.profileTableColumns.length;b++) 
      { 
       modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"Yes"}); 
      }*/ 



      //for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
      for(var b:int=0;b<model.profileTableColumns.length;b++) 
      { 
       //loop though the second collection 
       for(var a:String in User360DegreePodCreationView.user360PodView.MyArray) 
       { 
        //compare collection 
        if(User360DegreePodCreationView.user360PodView.MyArray[a] == model.profileTableColumns[b].columnName) 
        { 
         modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"true"}); 
         break; 
         //modifiedProfileColumns.setItemAt({columnName:model.profileTableColumns[b].columnName,selection:"true"},b+1); 

        } 
        else 
        { 

         modifiedProfileColumns.addItem({columnName:model.profileTableColumns[b].columnName,selection:"false"}); 

        } 


       } 

      } 


      fieldList.dataProvider = modifiedProfileColumns; 
     } 

вот список codeing

  <s:List id="fieldList" 
         width="100%" 
         height="170" 
         enabled="{isEnabled}" 
         click="fieldList_clickHandler(event)"> 
        <s:itemRenderer> 
         <fx:Component id="itemRender"> 
          <s:MXItemRenderer> 
           <fx:Script> 
            <![CDATA[ 


            ]]> 
           </fx:Script> 



           <s:CheckBox left="5" 
              label="{data.columnName}" 
              selected="{data.selection=='true'}" 
              id="chkColumn"/> 
          </s:MXItemRenderer> 
         </fx:Component> 
        </s:itemRenderer> 
       </s:List> 

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

+0

где вы разместили этот код? Внутри тега скрипта itemrenderer? –

+0

Возможно, вы захотите поработать над этой линией, так как у нее плохие коды Smell. User360DegreePodCreation.user360PodCreation.fieldList.dataProvider [Ь] .columnNamE. –

+0

yaa on click of button event Я сравниваю две коллекции массивов – praveen

ответ

0

Предполагая, что отображаемые элементы каким-то образом идентифицируемы (имеют какое-то свойство Id или что-то уникальное). Я настоятельно рекомендую не использовать двойной цикл для всех элементов ваших коллекций, поскольку они должны иметь экспоненциальное поведение во время выполнения.

Я бы гораздо больше предложил создать индекс элементов вашей коллекции. Если ваше уникальное свойство (или набор свойств), то вы можете использовать объект Object для создания индекса, основанного на этом свойстве.

Предполагая, что у вас есть функция, которая перезапускает строковый ключ для элемента giben.

getItemKey(item:Object):String 

Тогда я предложил бы создать индекс следующим образом:

var index:Object = {}; // This is a shorthand for "var index:Object = new Object(); 
for each(var item:Object in collection1) { 
    var key:String getItemKey(item); 
    index[key] = item; 
} 

После того, как индекс вы можете получить ссылку на ваш щелкнутой пункт вроде этого:

var clickedItemKey:String = getItemKey(clickedItem); 
if(index[clickedItemKey]) { 
    var itemInCollection1:Object = index[clickedItemKey]; 
    // Do something with the clicked item 
} else { 
    // The item was not found in collection1 
} 

Я думаю, этот подход должен быть намного быстрее и легче читать.

+0

спасибо за ур ответить @chris его отлично работает для пары с ключом, но мне нужно, чтобы у меня есть MYarray – praveen

+0

Ну, в flex это не имеет значения, если «collection1» представляет собой коллекцию или массив. «для каждого» работает одинаково. –

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

  • Нет связанных вопросов^_^