knockout.js - knockout compute function - Cannot read property 'price' of null -
i trying access property of object, know object exists (and has property need) can log console.
however when try , access it, says cannot read property 'price' of null.
i c# developer , little confused must doing wrong not know what? screenshot, can see object returned.
my code below:
self.total = ko.computed(function(){ var total = 0; var selectedservername = this.selectedserver(); var selectedserverobject = ko.utils.arrayfirst(this.server, function(server){ console.log("server.name = " + server.name); console.log("selectedservername = " + selectedservername); var servercompare = (server.name == this.selectedserver()); console.log("servercompare " + servercompare); }, this); var selectedosname = this.selectedos(); var selectedosobject = ko.utils.arrayfirst(this.os, function(os){ console.log("os.name = " + os.name); console.log("selectedosname = " + selectedosname); var oscompare = (os.name == this.selectedserver()); console.log("oscompare " + oscompare); }, this); total = total + selectedserverobject.price + selectedosobject.price; return total; },this);
update
my updated fiddle here: fiddle here
thanks d.raev appears when second log line added console.log(selectedserverobject.price
, arrayfirst function starts being called selectedserver = undefined
.
server.name = dell r210 selectedservername = undefined servercompare false server.name = dell r710 selectedservername = undefined servercompare false server.name = dell r720 dual cpu selectedservername = undefined servercompare false os.name = windows standard selectedosname = undefined oscompare false os.name = windows enterprise selectedosname = undefined oscompare false os.name = centos linux selectedosname = undefined oscompare false os.name = debian selectedosname = undefined oscompare false 1. uncaught typeerror: cannot read property 'price' of null
the undefined value selectedosname or selectedservername causing total fail, reason being set undefined?
your script runs 2 times function, adding second debug shows more clear:
var selectedserverobject = ko.utils.arrayfirst(this.server, function(server){ console.log("server.name = " + server.name); console.log("selectedserver = " + this.selectedserver()); return server.name == this.selectedserver(); }, this);
output:
server.name = dell r210
selectedserver = undefined
server.name = dell r710
selectedserver = undefined
server.name = dell r720 dual cpu
selectedserver = undefined
null (selectedserverobject)
...
server.name = dell r210
selectedserver = dell r210
object {name: "dell r210", specification: "1 x 2.4ghz quad core cpu 4gb ram
2 x 300gb sas 15k", price: 100}
just add check if selectedserverobject set .. or find why called 2 times:
example:
if(selectedserverobject){ total = total + selectedserverobject.price; }
Comments
Post a Comment