在旋转时使用MVVM更新Kendo NumericTextBox

Mat*_*att 5 javascript jquery mvvm kendo-ui kendonumerictextbox

看看在MVVM例子在这里:

如何在旋转事件上获取MVVM值(单击向上或向下箭头)

这是我尝试过的:

在旋转事件中,我试图这样做

$("#ntb").getKendoNumericTextBox().trigger("change");
Run Code Online (Sandbox Code Playgroud)

这有效,但有副作用.

如果DOM上有足够的元素,则旋转事件将继续触发.

另一种重现方法是从这里获取代码(jsbin)

将其插入HTML文件,将其加载到Chrome或FF中,然后在此行插入一个断点:

$("#ntb").getKendoNumericTextBox().trigger("change");
Run Code Online (Sandbox Code Playgroud)

继续点击继续,您将看到断点一次又一次地被击中.

在firefox中,如果我的DOM足够大,我会得到一个没有断点的repro.

Ima*_*sab 3

我检查了你的jsbin,发现 html 和 javascript 中有一些错误。我认为当您测试不同的代码时您忘记了更正它。无论如何,我清理并更正了您的代码并将它们放入 this jsfiddle

设置断点(debugger;)后,我看到你是对的onSpin,事件无限触发,但是如果你在事件中设置断点,就会发生这种奇怪的行为。如果您删除断点并放置console.log("onSpin,event triggered.");您会发现一切正常,并且事件仅触发一次。

我之前在不同的场景中遇到过这样的问题,例如使用而alert()不是出于console.log()调试目的。


代码:

var viewModel = kendo.observable({
    selectedNumber: 0,
    isEnabled: true,
    isVisible: true,
    onSpin: function () {
        //debugger;
        console.log("`onSpin` event triggered.");
        $("#ntb").getKendoNumericTextBox().trigger("change");
    },
    onChange: function () {}
});
kendo.bind($("#example"), viewModel);
Run Code Online (Sandbox Code Playgroud)