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を介して行うこともできますが、私には非常に多くのプロパティがあり、それを行うつもりはありません。

この例では、ステータスが変更された場合はコンソールのみの「status」が出力されますが、プロパティ「name」が変更された場合は何も実行されません。

申し訳ありませんが、私の英語です。

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。何度もループしないようにします。(変数が変更されるたびにループします。カウンターを配置して1回実行できます。)

于 2012-07-08T13:47:11.890 に答える