Каков правильный синтаксис для изменения параметров в существующей сетке кендо?

У меня есть Кендо Сетка:

$('#myGrid').kendoGrid({
    ...
    scrollable: false,
    ...
});

а затем позже я хочу изменить его прокручиваемое свойство. Я пробовал все следующее:

$('#myGrid').data("kendoGrid").options.scrollable = true;
$('#myGrid').data("kendoGrid").refresh();

-

$('#myGrid').data("kendoGrid").scrollable = true;
$('#myGrid').data("kendoGrid").refresh();

-

var MyGrid = $('#myGrid').data("kendoGrid");
MyGrid.options.scrollable = true;
MyGrid.refresh();

-

var MyGrid = $('#myGrid').data("kendoGrid");
MyGrid.scrollable = true;
MyGrid.refresh();

Ничего не работает. Как изменить возможность прокрутки сетки на лету?


person Zook    schedule 16.10.2013    source источник


Ответы (3)


Это не поддерживается из коробки, поэтому вам придется возиться с внутренностями. Вероятно, проще просто воссоздать сетку, но если вы все еще считаете, что она вам нужна, эта скрипка может помочь указать вам правильное направление:

http://jsfiddle.net/lhoeppner/AKzzL/

В принципе, вы можете попробовать использовать что-то вроде этого:

function enableScrolling() {
    if (!grid.options.scrollable) {
        grid.options.scrollable = true;
        grid._thead();
        grid.refresh();
    }
}

function disableScrolling() {
    grid.options.scrollable = false;
    grid.table.unwrap(); // manually remove the wrapper that enables scrolling
}

Однако создание прокручиваемой сетки без прокрутки приводит к тому, что столбцы данных имеют неправильную ширину, поэтому в зависимости от ваших требований вам может потребоваться настроить это еще немного.

person Lars Höppner    schedule 16.10.2013
comment
В итоге просто воссоздал все это. Стоит отметить, что вам может потребоваться активно уничтожить сетку перед ее воссозданием. -- Кроме того, свойство высоты не исчезает при его уничтожении (даже если оно было установлено в свойствах сетки), поэтому, если вы воссоздаете прокручиваемую сетку как непрокручиваемую сетку, вам нужно вызвать $( '#myGrid').css('высота', ''); - person Zook; 17.10.2013
comment
Полезно знать, спасибо. Возможно, Telerik в какой-то момент реализует .setOptions для сетки (они есть для некоторых их виджетов), чтобы упростить эту задачу. Учитывая важность SPA в наши дни, это может показаться хорошей идеей, но, конечно, они имеют ограниченные ресурсы. - person Lars Höppner; 17.10.2013

Параметры сетки не могут быть изменены динамически. Вам нужно заново создать всю сетку с различными параметрами, чтобы отключить/включить их динамически.

ИЗМЕНИТЬ Начиная с третьего квартала 2014 года Grid поддерживает setOptions, который внутри делает почти то же самое, но синхронизирует большинство параметров и состояние источника данных.

person Petur Subev    schedule 16.10.2013

var MyGrid = $('#myGrid').data("kendoGrid");
MyGrid.options.scrollable = true;

(исходя из моего опыта) Затем вам нужно перезагрузить источник данных, например:

MyGrid.setDataSource(kendoDataSource);
person dr.Crow    schedule 20.11.2015