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

Popular posts from this blog

java - Suppress Jboss version details from HTTP error response -

gridview - Yii2 DataPorivider $totalSum for a column -

Sass watch command compiles .scss files before full sftp upload -