extjsGirdPanel.getView (). getRowClass не работает во второй раз - PullRequest
0 голосов
/ 26 мая 2009

Обработчик кнопки extjsAction вызывает функцию со следующим кодом.

  Add: function() {
        var window = Ext.getCmp('wndAdd');
        window.items.items[0].getStore().reload;
        var Grid1 = Ext.getCmp('grdAll');

        var grdStore2 = Ext.getCmp('grid2').getStore();
        var i = 0;
        var IDList = new Array();
        for (i = 0; i < grdStore2.data.length; i++) {

               IDList[i] =
               grdStore2.data.items[i].data['ID'];

        }

        Grid1.getView().getRowClass = function(record, index) {

            if (IDList.contains(record.data["ID"])) {
                return 'disabled-row';
            }
        };

        window.show();

    }

Но функция getRowClass работает только при первом нажатии кнопки. не отключает строку, которая добавляется.

Ответы [ 4 ]

2 голосов
/ 27 мая 2009

getRowClass нужно назначать только один раз. Это не функция, которую вы вызываете, это функция, вызываемая сеткой каждый раз при визуализации строки. Вместо того, чтобы назначать его внутри функции обработки событий, ему следует назначать ОДИН раз, где-то на уровне приложения (например, там, где сначала был настроен сам Grid1, было бы наиболее логичным местом). Это может или не может быть вашей проблемой, в зависимости от того, как вызывается ваша функция Add, что не ясно. Имейте в виду, что, поскольку вы полагаетесь на IDList внутри getRowClass, вам также нужно будет иметь ссылку на эту переменную, которая находится в области действия функции, и вам, вероятно, также придется добавить проверки, чтобы убедиться, что она действительна перед доступом это.

Вы также не показываете, где Grid1 перерисовывается. Как объяснено выше, getRowClass выполняется только при визуализации строк, поэтому, если вы не обновляете Grid1 где-то, что не показано в вашем коде, getRowClass никогда не будет вызываться.

1 голос
/ 12 июня 2009

К вашему сведению, хотя я рад, что вы нашли решение, которое работает для вас, я не уверен, что вы все еще понимаете getRowClass. Он НЕ вызывается только один раз - он вызывается КАЖДЫЙ раз, когда строка сетки перерисовывается (что происходит при изменении данных). В ВАШЕМ коде он вызывался только один раз, потому что ваш код был настроен неправильно.

Я не полностью понимаю ваш вариант использования, но независимо от отображаемого окна, чередование строк нужно будет изменить только в том случае, если базовые данные сетки действительно изменились. При правильной настройке функции getRowClass сетка автоматически вызывает ее для вас, когда это необходимо, и должна «просто работать». Не должно быть необходимости в написанном вами коде итерации, который просто добавляет дополнительные издержки.

Опять же, к вашему сведению. :)

1 голос
/ 12 июня 2009

Да, getRowClass вызывается только один раз, когда сетка настроена. Но я хотел что-то, что сработало бы каждый раз, когда запускается window.show (). Я использовал следующий код для события window.onshow.

for (var i = 0; i < Grid1.getStore().data.length; i++) {
    var element = Ext.get(Grid1.getView().getRow(i));
    var record = Grid1.getStore().getAt(i);
    if (IdList.contains(record.data.ID)) {
        element.addClass('disabled-row')
    } else {
        element.removeClass('disabled-row')
    }
}
0 голосов
/ 27 мая 2009

Я отредактирую свой ответ соответствующим ответом, как только предоставлю больше информации.

Когда вы запускаете getRowClass? Похоже, вы создаете функцию, но на самом деле никогда не вызываете ответ.

Выдает ли функция ошибку, вызывается ли вообще или просто не выполняет то, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...