dojox DataGrid onStyleRow работает в первый раз, потом не снова - PullRequest
1 голос
/ 20 августа 2011

Я пытаюсь создать легенду, используя DataGrid.Моя проблема в том, что я хочу, чтобы текст в Datagrid был цветным.Я использую функцию onStyleRow, как описано здесь: (http://dojotoolkit.org/reference-guide/dojox/grid/DataGrid.html), и она работает в первый раз после развертывания. Текст в DataGrid становится красным, но если я обновляю или открываю, попробуйте его в другом браузере, текст DataGrid не приходиткрасный, только стандартный черный.

Мне было интересно, что я делаю не так, спасибо, вот мой код:

if(dijit.byId("plotlegend")){
    dijit.byId("plotlegend").destroy();
}

var threadGrid = new dojox.grid.DataGrid({
    id: 'plotlegend',
    store: oStore,
    structure: layout,
    rowsPerPage: 5,
    rowSelector: false,
    autoWidth: true,
    query: {},
    plotsObject: this.plotsObject,
    onStyleRow: function(row){
        var legend = this;
        var item = legend.getItem(row.index);
        if (item){
                var variableName = legend.store.getValue(item, "plot");
            if (variableName){
                var color = "color:red;";
                row.customStyles += color;
            }
        }

        legend.focus.styleRow(row);
        legend.edit.styleRow(row);
    }
},document.createElement('div'));

dojo.byId("plotlegendbc").appendChild(threadGrid.domNode);
threadGrid.startup();
threadGrid.update();

Ответы [ 2 ]

2 голосов
/ 05 июня 2012

Не уверен, решит ли это вашу проблему, но лучше, если последняя строка вашей функции пользовательского стиля будет выглядеть так: dojox.grid.DataGrid.prototype.onStyleRow.apply (this, arguments);

(Удалите строки grid.focus.styleRow и grid.focus.edit.styleRow. Этот код будет более совместимым с прямой версией, поскольку он напрямую запускает функцию onStyleRow по умолчанию.

1 голос
/ 14 октября 2011

У меня больше успехов в использовании dojo.connect для обработки этого события и правильного применения стилей.Я не использовал отдельные стили, так как CSS-классы - лучший способ управления стилями.Это лучше для обслуживания, потому что тогда у вас нет отдельных стилей, встроенных в ваш JavaScript.Вот фрагмент того, что работает для меня.Имейте в виду, что это на Dojo 1.5.

var grid = dijit.byId('myDataGrid');
dojo.connect(grid, 'onStyleRow' , this, function(row) {                    
    var item = grid.getItem(row.index);
    if (item) {
        if(item.status != "viewed"){
            row.customClasses += " unRead";
        }else{
            row.customClasses += " read";
        }

        if(item.status == "not active"){
            row.customClasses += " dismissed";
        }
    }
    grid.focus.styleRow(row);
    grid.edit.styleRow(row);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...