object references
http://stackoverflow.com/questions/11991588/knockoutjs-either-bound-value-not-updating-or-ko-computed-not-updating#11991588
by rniemeyer
HTML
<script src="http://knockoutjs.com/downloads/knockout-2.1.0.js"></script>
<ul data-bind="foreach: roles">
<li data-bind="click: toggle">
<span data-bind="text: id"></span>
<span data-bind="visible: selected">*</span>
</li>
</ul>
JavaScript
var roles = [
{ id: 1 },
{ id: 2, selected: true },
{ id: 3 }
];
var viewModel = (function (roles) {
var obj = {};
var arr = [];
for (var i = 0; i < roles.length; i++) {
arr.push({
id: roles[i].id,
selected: ko.observable(roles[i].selected || false),
toggle: function () {
this.selected(!this.selected());
}
});
}
obj.roles = ko.observable(arr);
return obj;
})(roles);
var sectionManager=(function(){
return {
init: function (roles) {
for (var i = 0; i < roles.length; i++) {
var item = roles[i];
item.selected.subscribe(function () {
console.log(this.id); // ALWAYS 3!!
}, item);
}
}
};
})();
$(function () {
sectionManager.init(viewModel.roles());
ko.applyBindings(viewModel);
});