invalidateList() не работает для AdvancedDataGrid при запуске пользовательским подклассом
Я хочу сохранить порядок столбцов AdvancedDataGrid для пользователя, если он переместит их и закроет окно или выйдет из системы. У меня есть код (см. Ниже), который работает, когда я помещаю код в родительский контейнер сетки - например, окно заголовка. Я хотел бы обобщить функциональность, поместив код в подкласс AdvancedDatagrid, а не в каждый контейнер сетки, чтобы все мои сетки имели доступ к одному местоположению при сохранении / загрузке своих выборов. Мой подход заключается в сохранении имен полей данных и имени сетки в массиве и сохранении / чтении в / из общего объекта. и обновите порядок столбцов на основе этого порядка. Инвалидность завершается ошибкой, когда я использую код в подклассе Advanced Datagrid, но отлично работает в родительском элементе сетки. У кого-нибудь есть идеи? я бился головой об этом уже 2 дня:(
приватная функция loadSettings(name:String = "custom"):void { var gridName:String = this.stripUIDNumbers(this.uid); var temp:Array = new Array;
this.wsColOrder = SharedObject.getLocal(sharedObjectName);
if (wsColOrder.size > 0)
{
for each (var item:* in wsColOrder.data)
{
if (item is Array && item.indexOf(gridName) != -1) // check for the current grid
{
for each (var saveColDataField:String in item)
{
for each (var existingCol:AdvancedDataGridColumn in this._columns)
{
if (existingCol.dataField == saveColDataField)
{
temp.push(existingCol);
}
}
}
this._columns.splice(0); // clean out the existing colum array
this._columns = temp // assign persisted col order
this.invalidateList(); // update the grid
}
}
}
else
{
// saveSettings("default");
}
1 ответ
На первый взгляд, я бы спросил, почему вы используете переменную _columns. Использование getter / setter для "столбцов" гарантирует, что вы используете процесс аннулирования, а правильные флаги устанавливаются и сбрасываются в вашем унаследованном AdvancedDatagrid…. Это первое, что я бы изменил. (также, строка splice(0) не нужна, когда вы устанавливаете массив столбцов на следующей строке).
ХОРОШО, это второе, что я бы изменил... Сначала я должен убедиться, что ваши локальные sharedObjects напечатаны, но это личное предпочтение моей читабельности кода. Google "flash.net.registerClassAlias" или сделайте что-нибудь с классом ValueObject, чтобы вы могли хранить порядок dataField, чтобы вам не приходилось делать "для каждого *".
Надеюсь, это поможет хоть немного. Удачи.