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);

Однако, если я передаю массив с объектами, он работает, я увидел, что при передаче объекта 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-reactor

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top