5

看看这里的 MVVM 示例:

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

这是我尝试过的:

在旋转事件中,我试图做

$("#ntb").getKendoNumericTextBox().trigger("change");

这有效,但有奇怪的副作用。

如果 DOM 上有足够多的元素,则 spin 事件将继续触发。

重现此问题的另一种方法是从此处获取代码(jsbin)

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

$("#ntb").getKendoNumericTextBox().trigger("change");

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

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

4

3 回答 3

3

我检查了你的jsbin,发现 html 和 javascript 中有一些错误。我认为当您测试不同的代码时,您忘记了更正它。无论如何,我清理并更正了您的代码并将它们放入此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);
于 2014-05-24T09:36:43.000 回答
1

剑道支持说要在旋转事件中运行它:

this.set('selectedNumber', e.sender.element.val());

这使问题消失了。

于 2014-05-27T18:40:45.653 回答
0

你可以试试下面的代码。这个对我有用。

视图模型

viewModel.bind("change", function (e) {
        console.log("property Changed on spin ");
    });

剃刀代码

<input id="tbSlideDuration" data-role="numerictextbox"
                             data-format="#"
                             data-min="1"
                             data-max="100"
                             data-bind="value:slideDuration, events: {spin:change}" />

这将在后台调用更改事件:)

于 2015-02-12T03:41:26.253 回答