Добавление связующего столбца флажка в сетку

Введите этот столбец в сетку Kendo, в котором в настоящее время отображается логическое значение MySQL, поэтому у нас есть либо 1, либо 0.

Сделал эту демонстрацию для воспроизведения...

Это в сетке autosync и inline: true.

Мне хотелось бы, чтобы этот столбец имел тип "Checkbox", но по каким-то странным причинам я просто не могу найти демонстрацию или пример в Интернете, который отображает флажок "включен", который меняет от 1 до 0, когда он снят, и вице- Versa.

Ответы

Ответ 1

Есть несколько предыдущих соображений:

  • Когда вы щелкаете в ячейке для редактирования, вы переключаете ее в режим редактирования, а затем выполняете функцию редактора.
  • Если вы не находитесь в режиме редактирования, несмотря на используемый HTML, изменения не переносятся в модели.
  • Пользовательский интерфейс Kendo отображает boolean как флажки для редактирования, но не в режиме редактирования.

Что вам нужно сделать:

  • Определите шаблон для отображения флажка.
  • Если вы не хотите дважды щелкнуть флажок (первый для входа в режим редактирования, а второй для изменения его значения), вам нужно установить флажок, но привязать событие изменения, которое перехватывает клики на нем и изменяет модель.

Определение шаблона:

{
    title   : "Fully Paid",
    field   : "fullyPaid",
    template: "<input name='fullyPaid' class='ob-paid' type='checkbox' data-bind='checked: fullyPaid' #= fullyPaid ? checked='checked' : '' #/>"
}

Как вы можете видеть, я не определяю функцию редактора, так как мы изменим значение флажка без входа в режим редактирования.

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

grid.tbody.on("change", ".ob-paid", function (e) {
    var row = $(e.target).closest("tr");
    var item = grid.dataItem(row);
    item.set("fullyPaid", $(e.target).is(":checked") ? 1 : 0);
});

Ваш JSBin изменен здесь: http://jsbin.com/ebadaj/12/edit

Ответ 2

У меня была такая же проблема с моей отредактированной сеткой. Решения, которые я нашел, были предназначены только для одной конкретной колонки (как упомянутое выше решение). Поэтому я изменил

item.set("fullyPaid", $(e.target).is(":checked") ? 1 : 0);

к

var col = $(this).closest('td');
dataItem.set(grid.columns[col.index()].field, checked);

Поэтому вы можете использовать его для любых столбцов флажков.

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

Итак, я тестировал различные вещи, чтобы заставить его работать и в конечном итоге:

В определении столбца:

.ClientTemplate("<input type='checkbox' #= CheckboxColumn? checked='checked': checked='' # class='chkbx' />");

И script ниже:

<script>
    $(function () {
        $('#GridName').on('click', '.chkbx', function () {
            var checked = $(this).is(':checked');
            var grid = $('#GridName').data().kendoGrid;
            grid.closeCell();
            var dataItem = grid.dataItem($(this).closest('tr'));
            var col = $(this).closest('td');
            grid.editCell(col);
            dataItem.set(grid.columns[col.index()].field, checked);
            grid.closeCell(col);
        });
    });
</script>