Kendo ui 避免在剑道对话动作中创建闭包

Kendo ui 避免在剑道对话动作中创建闭包,kendo-ui,Kendo Ui,我有一个剑道对话,它应该对用户的动作做出反应;用户单击东西1-3时,会出现一个对话框,说“你好!你想搞乱东西1-3吗?”当用户单击“确定”时,我们启动一个异步操作,告诉服务器搞乱这些东西 理论上,这很容易做到。问题是那里的actions.action函数会创建一个闭包,因此如果我第一次弹出打开项目[1,2,3]的对话框,它将只会使用[1,2,3]触发该操作,如下面的演示所示。如何解决此问题,使actions函数在每次打开对话框时自动更新?我目前最好的解决方案是搞乱对话框内容的HTML,这样我就可

我有一个剑道对话,它应该对用户的动作做出反应;用户单击东西1-3时,会出现一个对话框,说“你好!你想搞乱东西1-3吗?”当用户单击“确定”时,我们启动一个异步操作,告诉服务器搞乱这些东西

理论上,这很容易做到。问题是那里的
actions.action
函数会创建一个闭包,因此如果我第一次弹出打开项目
[1,2,3]
的对话框,它将只会使用
[1,2,3]
触发该操作,如下面的演示所示。如何解决此问题,使actions函数在每次打开对话框时自动更新?我目前最好的解决方案是搞乱对话框内容的HTML,这样我就可以从动作中删除它,但我更喜欢更干净的解决方案

函数popDialog(){
//通常情况下,我会从HTML中提取这个,但这可以用于演示。
const chosenItems=[];
对于(设ii=0;ii<3;ii++){
const nextNum=Math.floor(10*Math.random());
chosenItems.push(下一个);
}
$(“#kendoDialog”)。kendoDialog({
标题:“剑道对话组件”,
内容:`我看到你在搞${chosenItems}`,
行动:[{
文字:“OK”,
行动:职能(e){
警报(`Now messing with${chosenItems}`);
},
小学:对
}]
});
}


打开Dialog我认为最简单的解决方案是每次创建和销毁Dialog小部件,从一个仅为此目的而创建并附加到DOM的
div
。我修改了您的
popDialog
函数来演示这一点

请注意,我还添加了一个
close
事件处理程序,它在对话框关闭时销毁小部件实例;这反过来会清除剑道生成的所有标记,并释放任何事件处理程序等

函数popDialog(){
//通常情况下,我会从HTML中提取这个,但这可以用于演示。
const chosenItems=[];
对于(设ii=0;ii<3;ii++){
const nextNum=Math.floor(10*Math.random());
chosenItems.push(下一个);
}
var dlg=$.parseHTML(“”);
$(“正文”)。附加(dlg);
$(dlg).kendoDialog({
标题:“剑道对话组件”,
内容:`我看到你在搞${chosenItems}`,
行动:[{
文字:“OK”,
行动:职能(e){
警报(`Now messing with${chosenItems}`);
},
小学:对
}],
关闭:功能(e){
这个。销毁();
}
});
}


打开Dialog我认为最简单的解决方案是每次创建和销毁Dialog小部件,从一个仅为此目的而创建并附加到DOM的
div
。我修改了您的
popDialog
函数来演示这一点

请注意,我还添加了一个
close
事件处理程序,它在对话框关闭时销毁小部件实例;这反过来会清除剑道生成的所有标记,并释放任何事件处理程序等

函数popDialog(){
//通常情况下,我会从HTML中提取这个,但这可以用于演示。
const chosenItems=[];
对于(设ii=0;ii<3;ii++){
const nextNum=Math.floor(10*Math.random());
chosenItems.push(下一个);
}
var dlg=$.parseHTML(“”);
$(“正文”)。附加(dlg);
$(dlg).kendoDialog({
标题:“剑道对话组件”,
内容:`我看到你在搞${chosenItems}`,
行动:[{
文字:“OK”,
行动:职能(e){
警报(`Now messing with${chosenItems}`);
},
小学:对
}],
关闭:功能(e){
这个。销毁();
}
});
}

打开对话框