Как получить данные строки сетки Kendo-UI при изменении текстовых значений - PullRequest
1 голос
/ 17 января 2020

Я использую Kendo UI для jQuery. Моя сетка имеет 2 столбца: число с плавающей точкой и текст. Мне нужно получить строку сетки, когда значения меняются. Для числового поля c все работает нормально, но для текстового поля - нет: вызывается функция-обработчик, но как мне получить в ней данные сетки? (Я использую тот же обработчик, но это не имеет значения).

export class MyGrid {
    constructor() {
        let that: MyGrid = this;

        $("#MyGrid").kendoGrid({
            dataBound: function (e) {
                this.tbody.find(".MyNumericValue").each(function () {
                    $(this).kendoNumericTextBox({
                        format: "n3",
                        decimals: 3,
                        change: that.onValueChange.bind(that)
                    });
                });

                // Event function is called, but how to get row data?
                this.tbody.find(".MyTextValue").each(function () {
                    $(this).on("change", that.onValueChange.bind(that))
                });
            }
        });
    }
}

Столбцы:

let columns = [
    {
        title: "Decimal value",
        field: "RoadLength",
        template: "<input name='RoadLength' class='MyNumericValue' value='#: RoadLength #' />"
    },
    {
        title: "Text value",
        field: "Name",
        template: "<input name='Name' class='k-textbox MyTextValue' value='#: Name #' />"
    }
];

Событие: для текстового поля " e.sender.element.closest ("tr")"не работает.

onValueChange(e: any): void {
    let g = $("#MyGrid").data("kendoGrid");
    let dataItem = g.dataItem(e.sender.element.closest("tr"));
    let name: string = e.sender.element[0].name;
    let value = e.sender.value();
    // dataItem.set(name, value);    
}

1 Ответ

1 голос
/ 20 января 2020

С событием изменения kendoNumericTextBox e.sender является самим kendoNumericTextBox, а e.sender.element является экземпляром jQuery исходного виджета. Приведенный выше обработчик событий должен работать хорошо.

В обычном текстовом поле событие изменения представляет собой jQuery событие . e.sender отсутствует, и поэтому приведенный выше код создаст ошибку. В этом случае мы используем $ (e.target).

Ваш код, вероятно, должен разделять эти два случая.

И, кстати, расширение для уведомлений об ошибках javascript для веб-браузера, например этот поможет вам легко определить проблему.

Надеюсь, эта помощь!

...