knockout.js - Referencing observable from inline computed method -
am missing anything, or not possible declare computed "inline" property id_and_name below in first example?
function viewmodel(){      var self = this;      // adding 'inline' won't work (exception functions doesn't exist):     self.person = ko.observable({         id: ko.observable(),         name: ko.observable(),         id_and_name: ko.computed(function(){ return this.id() + this.name(); }, self.person)     });      // works:     self.person.id_and_name = ko.computed(function(){          return this.id() + this.name();      }, self.person); } 
well, self.person undefined until after ko.observable call has returned. computed bootstrapped before that, bootstrapped @ moment when self.person still undefined. can check out in the computed source code file, pretty easy read actually.
here's 1 way @ that:
function viewmodel() {   var self = this;    self.person = "temp";    self.person = ko.observable({     id: ko.observable(),     name: ko.observable(),     id_and_name: ko.computed(function() {       console.log(this);       return this.id() + this.name();     }, self.person)   }); } it'll log "temp" upon initializing, because that's self.person is @ time. cannot change this target computed read function after created.
so nope, want can't done. need second solution or proper view model constructor function*.
* top level viewmodel such constructor function. create inner constructor funciton person id , name properties, , new up, give id_and_name computed automatically have correct this bound.
Comments
Post a Comment