1

如何获取下一个对象的更改事件?

    $(function () {
    var Data = {
        id: ko.observable(15),
        name: ko.observable('my name'),
        status: ko.observable('status')
    }

    var ClickCounterViewModel = function () {
        var me = this;
        me.Model = ko.observable(Data);

        me.change = ko.computed(function () {
            var m = me.Model();
            console.log(m.status());
        });
    };

    ko.applyBindings(new ClickCounterViewModel());
});

我从以下位置获取对象数据:

ko.mapping(AnyInitData, {}, Data);

模型的所有属性都是可观察的,但如果有任何值被改变,我想知道这一点。它可以通过 ko.computed 来完成,但我有很多属性,并且不会这样做。

如果状态已更改,则控制台的此示例输出仅“状态”,但如果属性“名称”已更改,则不执行任何操作。

对不起我的英语不好。

4

1 回答 1

2

可能我的解决方案不是最合适或最优雅的方式,但是,如果您在计算变量中评估可观察对象,则每次变量更改时都会调用它。例如:

me.change = ko.computed(function () {
        var m = me.Model();
        alert('something changed');
        m.id(),m.name(),m.status();
    });

如果你有很多属性,你可以遍历模型:

me.change = ko.computed(function () {
        var m = me.Model();
        alert('something changed');

        for (var key in me.Model()) {
            var obj = me.Model()[key]; 
             if( ko.isObservable(obj)){
                obj();                 
             }             
        }
    });

您也可以考虑 1. 在模型 2 中递归循环。防止循环多次。(每次变量更改时它都会循环。您可以放置​​一个计数器来执行一次。)

于 2012-07-08T13:47:11.890 回答