CheckboxModel, предварительно выбирая строки - PullRequest
0 голосов
/ 22 декабря 2011

Heys Guys.

У меня есть эта ошибка, которая мучила меня уже несколько часов. Мне удалось найти «почему», но мне нужна ваша помощь, чтобы найти «как это исправить».

Это форма для редактирования "сложной" записи.

Мой макет (проще говоря) примерно такой:

  • форма
    • tabpanel
      • panel1 (по умолчанию)
        • ...
        • ...
      • panel2
        • сетка

После создания формы я перехожу к загрузки значений записи в форму и загрузки для выбора строк в сетке, в соответствии с записями во вложенном хранилище в записи. .

И моя проблема в том, что у сетки - или модели выбора - нет представления (по-видимому), она выдает " Невозможно прочитать свойство" length "с неопределенным "

в

onSelectChange: function(record, isSelected, suppressEvent, commitFn) {
    var me      = this,
        views   = me.views,
        viewsLn = views.length, // HERE <-------------
        store   = me.store,
        rowIdx  = store.indexOf(record),
        eventName = isSelected ? 'select' : 'deselect',
        i = 0;
...

Если я вставлю setTimeout , достаточно большой, чтобы изменить вкладку, прежде чем она попытается выбрать строк, она будет работать нормально.

Итак, кто-нибудь знает, как это исправить? Подход setTimeout , конечно, не вариант:)

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Я столкнулся с этой проблемой при добавлении миксина Ext.form.field.Field к Ext.grid.Panel, чтобы создать свой собственный тип поля GridMultiSelect. В частности, я обнаружил, что функция setValue() вызывается до визуализации сетки, поэтому установка выбора не удалась.

Функция setValue() может вызываться как до, так и после рендеринга сетки, поэтому вот мое решение:

if (this.rendered) {
    this.getSelectionModel().select(recordsToSelect);
} else {
    this.addListener('afterrender', function() {
        this.getSelectionModel().select(recordsToSelect);
    }, this, {
        single: true
    });
}

То есть, если он еще не отрендерен, создайте одноразовый прослушиватель для события afterrender и установите выделение.

0 голосов
/ 22 декабря 2011

Ну, проблема решена ... просто выделил строки в событии afterrender сетки.

Может помочь кому-нибудь.

...