invalidateList () не работает для AdvancedDataGrid при запуске пользовательским подклассом - PullRequest
0 голосов
/ 02 ноября 2010

Я хочу сохранить порядок столбцов AdvancedDataGrid для пользователя, если он переместит их и закроет окно или выйдет из системы.У меня есть код (см. Ниже), который работает, когда я помещаю код в родительский контейнер сетки - например, окно заголовка.Я хотел бы обобщить функциональность, поместив код в подкласс AdvancedDatagrid, а не в каждый контейнер сетки, чтобы все мои сетки имели доступ к одному местоположению при сохранении / загрузке своих выборов.Мой подход заключается в сохранении имен полей данных и имени сетки в массиве и сохранении / чтении в / из общего объекта.и обновите порядок столбцов на основе этого порядка.Инвалидность завершается ошибкой, когда я использую код в подклассе Advanced Datagrid, но отлично работает в родительском элементе сетки.У кого-нибудь есть идеи?я бился с этим два дня: (

приватная функция loadSettings (name: String = "custom"): void {var gridName: String = this.stripUIDNumbers (this.uid); var temp:Массив = новый Массив;

        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 Ответ

0 голосов
/ 02 ноября 2010

На первый взгляд, я бы спросил, почему вы используете переменную _columns. Использование getter / setter для столбцов гарантирует, что вы используете процесс аннулирования, а правильные флаги устанавливаются и сбрасываются в вашем унаследованном AdvancedDatagrid ..... - это первое, что я бы изменил. (также строка splice (0) не нужна, если вы устанавливаете массив столбцов на следующей строке).

ХОРОШО, это второе, что я бы изменил ... Сначала я должен убедиться, что ваши локальные sharedObjects напечатаны, но это личное предпочтение моей читабельности кода. Google "flash.net.registerClassAlias" или сделайте что-нибудь с классом ValueObject, чтобы вы могли хранить порядок dataField, чтобы вам не приходилось делать "для каждого *".

Надеюсь, это поможет хоть немного. Желаем удачи.

...