javascript - Changing observablearray value from viewmodel function -
i have function in view model should change enabled value in array false true.
editclick: function (user) { user.enabled = true; return true; } if put alert show change
user.enabled = true; alert(ko.tojson(user)); it shows did change bind value not change.
if put alert in front of change
alert(ko.tojson(user)); user.enabled = true; the second time click button alert show value changed.
here jsfiddle code use.
[js]
var myviewmodel = { myarray: ko.observablearray([{ myname: 'bob', mysurname: 'smith', enabled: false }, { myname: 'john', mysurname: 'smith', enabled: false }]), editclick: function (user) { user.enabled = true; alert(ko.tojson(user)); return true; } }; [code]
<table border="1" cellpadding="5" cellspacing="0"> <thead> <tr> <td>button</td> <td>value</td> </tr> </thead> <tbody data-bind="foreach: myarray"> <tr> <td> <input type="button" value="change" data-bind="click: $root.editclick" /> </td> <td><span data-bind="text: enabled" /> </td> </tr> </tbody> </table> i seems change not update viewmodel. there away make work.
thanx
the ko.observablearray tracks item addition or removal.
so in order ko track changes inside of items , automatically updates ui need make properties ko.observable:
myarray: ko.observablearray([{ myname: 'bob', mysurname: 'smith', enabled: ko.observable(false) }, { myname: 'john', mysurname: 'smith', enabled: ko.observable(false) }]) and in editclick need set enabled with: user.enabled(true); (because ko.observable returns function)
editclick: function (user) { user.enabled(true); alert(ko.tojson(user)); return true; } demo jsfiddle.
Comments
Post a Comment