Knockoutjs مراقبة الأشياء المتداخلة والاشتراك في التغييرات

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

ومع ذلك ، إذا قمت بتمرير مجموعة مع كائنات ، فهي تعمل ، عند نقل كائن إلى من JS ، لا يحتوي الكائن الذي تم إرجاعه على طريقة اشتراك على أي حال للتغلب على هذا؟

شكرًا

هل كانت مفيدة؟

المحلول

على افتراض أنك تريد أن يطلق المشترك في كل مرة 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