Сохранять выделение при обновлении сетки данных в ActionScript - PullRequest
2 голосов
/ 20 октября 2010

Я работаю над своим первым в мире приложением AIR с flashbuilder - просто чтобы вы знали.

Я связал mx:DataGrid компонент с DataProvider, который mx:HTTPService извлекает XML-файл с элементами. Чтобы данные оставались актуальными, я опрашиваю веб-службу через заданный интервал.

Моя проблема в том, что я теряю выбранный в данный момент элемент в моей DataGrid при обновлении данных. Я пытался сохранить DataGrid.selectedIndex и установить при обновлении данных, но я не уверен, когда это сделать ?! Самое близкое, что я нашел, - это восстановление индекса при запуске события updateComplete DataGrid. Это работает, но выбор сначала исчезает, а затем исчезает - не обновляется достаточно скоро.

Так, каков наилучший способ сохранить выбор? (только один выбранный элемент за раз)

И в качестве дополнительного вопроса: есть ли удобный способ только обновить данные, когда они действительно изменились?

Благодарен за любые предложения!

Ответы [ 2 ]

1 голос
/ 21 октября 2010

DG использует UUID элементов данных, чтобы определить, должен ли элемент быть выбран после обновления. Если элементы данных не реализуют IUID , они в основном получают случайные значения, создаваемые каждый раз, когда они добавляются в DG.

Если в ваших элементах данных реализован IUID, и вы используете непротиворечивое значение (например, порядковый номер БД), ГД «узнает», что после обновления элемент данных будет таким же, как и раньше.

1 голос
/ 20 октября 2010

Я начну снизу, единственный способ обновить данные только после их изменения - это пройти проверку данных на стороне сервера, чтобы увидеть, изменились ли данные, и сделать этот вызов перед фактическим обновлением. , Короче говоря, вы делаете два вызова: один, чтобы увидеть, изменились ли данные, - это запрос на стороне сервера, а второй - только если он возвращает true, который обновляет данные.

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

Что касается другого решения, после того как вы сохранили selectedIndex, сделайте это внутри вашего updateComplete:

private function yourDataGridUpdateComplete(event:FlexEvent):void{ 
    yourDataGrid.selectedIndex = yourIndex;
    yourDataGrid.validateNow();
    yourDataGrid.scrollToIndex(yourIndex);
}
...