kendo, typcript - переместить событие dataBound в отдельную функцию для повторного использования - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующий код для элемента kendo multiselect.

var newitemtext: string;
var multiselect = t.sender.element.find("#redirectUris-multiselect").kendoMultiSelect({
dataTextField: "text",
dataValueField: "value",
change() {
    ClientApplicationsGrid.prototype.changeFuncForMultiselect(this, multiselect);
},
dataBound() {
    if ((newitemtext || this._prev) && newitemtext !== this._prev) {
        newitemtext = this._prev;

        let dataitems = this.dataSource.data();

        for (let i = 0; i < dataitems.length; i++) {
            const dataItem = dataitems[i];

            if (dataItem.value !== dataItem.text) {
                this.dataSource.remove(dataItem);
            }
        }

        dataitems = this.dataSource.data();
        let found = false;
        for (let i = 0; i < dataitems.length; i++) {
            const dataItem = dataitems[i];
            if (dataItem.value === newitemtext) {
                found = true;
            }
        }

        if (!found && newitemtext !== "") {
            this.dataSource.add(
                { text: newitemtext + " (Add New)", value: newitemtext });
            this.open();
        }
    }
}}).data("kendoMultiSelect");

Я успешно переместил код из события change () в отдельную функцию ClientApplicationsGrid.prototype.changeFuncForMultiselect (this, multiselect). Мне нужно как-то сделать то же самое для события dataBound (), потому что у меня будет почти такой же множественный выбор в другом месте, и я хочу повторно использовать код. Но когда я сделал то же самое, что и для change (), я получил «Максимальный вызов трассировки стека». Я думаю, это потому, что я использую переменную newitemtext внутри dataBound (), но я не уверен.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

1 Ответ

0 голосов
/ 28 июня 2018

dataSource.remove() и dataSource.add() вызывают событие «dataBound» ( пример ), поэтому ваш код рекурсивен, и поэтому вы получили ошибку «Вызов трассировки максимального стека». Вы не должны изменять свой источник данных для события dataBound.

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