剑道,将 dataBound 事件移动到单独的函数中以重用



我有剑道多选元素的下一个代码。

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(( 执行相同的操作时,我得到了"最大堆栈跟踪调用"。我想这是因为我在 dataBound(( 中使用了 newitemtext 变量,但我不确定。

有人可以帮我做这些事情吗?

dataSource.remove()dataSource.add()触发"dataBound"事件(示例(,因此您的代码是递归的,这就是您收到错误"最大堆栈跟踪调用"的原因。不应更改 dataBound 事件上的数据源。

相关内容

最新更新