1

我想观察 ViewModel 对任何属性的任何更改。这可以通过 knockout.js 实现吗?

4

2 回答 2

2

Ryan Niemeyer 对为您的 Knockout 视图模型实现通用脏标志进行了出色的演练:

http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

得到的基本方法是使用 ko.toJSON 来比较整个视图模型的 JSON 表示,以确定是否有任何属性值发生了变化,这种方法简单而强大,只要您记住,如果您的视图模型变大并且嵌套这可能会成为一项昂贵的操作。

于 2012-11-16T21:19:56.380 回答
1

这段代码怎么样:

function subscribeToModelChange (viewModel)
{
    for (var prop in viewModel)
    {
        if (ko.isObservable (viewModel[prop])
            viewModel[prop].subscribe (function (newValue) { onModelChanged (viewModel[prop], newValue); });
    }
}

function onModelChanged (observable, newValue)
{
    alert ("Hooray!");
}

您将收到有关视图模型中任何可观察到的淘汰赛更改的通知。

于 2012-11-16T20:46:08.590 回答