i'm trying track down why i'm getting duplicate entries in observablearray. there way subscribe see before item added observable array? can see after item added using subscription like:
var myarr = ko.observablearray(); myarr.subscribe(function (changes) { changes.foreach(function (change) { var item = change.value; var itemstatus = change.status; if (itemstatus === "added") { } else if (itemstatus === "deleted") { } }); }, null, "arraychange");
tl;dr: can use signature myarray.subscribe(func, null, "beforechange").
an observablearray observable properties, subscribe features work normally. the relevant docs:
the
subscribefunction accepts 3 parameters:callbackfunction called whenever notification happens,target(optional) defines value ofthisin callback function, ,event(optional; default "change") name of event receive notification for....
if want notified of value of observable before changed, can subscribe
beforechangeevent.
here's example:
var viewmodel = function() { var self = this, = 1; self.items = ko.observablearray([i++, i++, i++]); self.additem = function() { self.items.push(i++); }; self.items.subscribe(function(oldvalue) { alert("changed from: " + ko.tojson(oldvalue)); }, null, "beforechange"); self.items.subscribe(function(newvalue) { alert("changed new value: " + ko.tojson(newvalue)); }); }; ko.applybindings(new viewmodel()); <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> <button data-bind="click: additem">add item</button> <ul data-bind="foreach: items"><li data-bind="text: $data"></li></ul>
Comments
Post a Comment