Nockoutjsはネストされたオブジェクトを観察し、変更を購読します

StackOverflow https://stackoverflow.com/questions/20353397

  •  25-08-2022
  •  | 
  •  

質問

ノックアウトJSとマッピングプラグインをご覧ください。オブジェクトを渡すと、変更のためにオブジェクトを購読できないことに気付きました。基本的に、オブジェクトのメンバーが変更された場合、通知されたいと思います。私は変わった属性を取り戻すことを本当に気にしません(しかし、それが可能であれば、方法を知りたいです)

function EventsKoModel(data){
    var self = this;
    self.event = ko.mapping.fromJS(data);
   //the below throws Error 
    //TypeError: self.event.subscribe is not a function
    self.event.subscribe(function(){
       console.log("something changed");
     });
}

var data = {
    'id': 14124124124124,
    'name': 'Some Event',
    'events': [{
       'id': 1
     },{
        'id': 2
      }]
}
var d = new EventsKoModel(data);
ko.applyBindings(d);

ただし、オブジェクトで配列を渡すと、ObjectをfromJSに渡すと、返されたオブジェクトがこれを回避するためのサブスクライブメソッドがありません。

ありがとう

役に立ちましたか?

解決

サブスクライバーに毎回発火したいと仮定すると event 初めて設定されたときを含めて更新されます。これを試すことができます。

function EventsKoModel(data){
    var self = this;
    self.event = ko.observable();
    self.event.subscribe(function(){
        console.log("something changed");
    });
    ko.mapping.fromJS(data, {}, self);
}

他のヒント

私はしばらく前に同じ要件を持っていて、このためにノックアウトリアクターを書きました。階層モデルを購読するのに適した仕事をしており、すぐに行くために必要な機能のほとんどを提供します。

これがそれへのリンクです:

https://github.com/ziadj/knockoutjs-rector

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top