2015-04-07 3 views
0

Я работаю в flex, и я сделал собственный снимок, где есть флажки, позволяющие пользователю выбирать несколько опций. Я использовал this template.Сбросить список выпадающих списков с прокруткой

Однако это не имеет прокрутки, потому что, если вы разрешите прокрутку по какой-либо причине, флажки начинают испортиться. Например, если у вас есть варианты с 1 по 8 и показаны только от 1 до 5. Вы выбираете вариант 1, а затем прокручиваете вниз, чтобы выбрать вариант 7. Когда вы прокручиваете вверх, флажки начинают переключаться, как вариант 3 неожиданно показывает выбранный. Продолжайте прокручивать вверх и вниз, и выбор флажка только изменится сам по себе. Я думаю, что это проблема рендеринга, и фактические данные выбора вообще не изменяются (он знает только вариант 1, и был выбран вариант 7). Есть какие нибудь идеи как это починить?

public function onOpen(event:DropDownEvent):void 
    {//load the checkboxes and set the mouse tracker 
     activateAllCheckBoxes(); 
     this.scroller.verticalScrollBar.addEventListener(Event.CHANGE, list_verticalScrollBar_change); 
     callLater(observeMouse); 
    } 

    private function list_verticalScrollBar_change(evt:Event):void 
    { 
     //currentlySelectedCheckBoxes = selectedCheckboxes; 
     UpdateCheckBoxesWhenScrolling(); 
     selectedIndex = -1; 
    } 

    protected function UpdateCheckBoxesWhenScrolling():void 
    { 
     for (var c:int = 0; c < dataGroup.numElements; c++) { 
      var obj:DropDownCheckBox = dataGroup.getElementAt(c) as DropDownCheckBox; 
      if(obj!=null) 
      { 
       var judgDebtorFromCheckBox:JudgDebtor = (obj.data) as JudgDebtor; 
       if(FindInCurrentList(judgDebtorFromCheckBox.JudgmentDebtorId)>0) 
       { 
        obj.checkbox.selected = true; 
       } 
       else 
       { 
        obj.checkbox.selected = false; 
       } 
      } 
     } 
    } 

    private function FindInCurrentList(ID:int):int 
    { 
     for(var i:int=0;i<currentlySelectedCheckBoxes.length;i++) 
     { 
      var JD:JudgDebtor = currentlySelectedCheckBoxes.getItemAt(i) as JudgDebtor; 
      if(JD.JudgmentDebtorId == ID) 
       return 1; 
     } 
     return -1; 
    } 

Таким образом, выше кода Я регистрирую прослушиватель событий прокрутки при выпадающем списке. Он будет обновлять выпадающие записи, которые имеют флажок, и он использует коллекцию массивов, называемую: nowSelectedCheckBoxes. Я отлаживаю функцию UpdateCheckBoxesWhenScrolling, и она работает нормально, другими словами, она будет проверять выбранные, но по какой-то причине она по-прежнему показывает неправильные результаты, например, 11 записей в списке, и выбрана только вторая. Я прокручиваю вниз, и я не может видеть вторую запись, но внезапно последняя запись показывает, что она отключена.

+0

Пожалуйста, посту кода здесь. – ketan

ответ

0

Это происходит потому, что выпадающий список повторно использует средства рендеринга при прокрутке. Например, если вы проверили 1-й элемент и прокрутите, средство визуализации для этого повторно используется, чтобы отобразить элемент, который становится видимым при прокрутке. Таким образом, последний элемент отображается как проверенный. Чтобы избежать портя выбор, вы должны сделать следующее в визуализаторе, который вы используете

override public function set data(value:Object):void 
{ 
    super.data = value; 

    //inspect the property which indicates whether to select the checkbox or not 
    //and set the value of selected property accordingly 
} 

Надеется, что это помогает