javascript - Applying multiple extenders in knockout -
i have following javascript code
function appviewmodel(){ this.myvalue = ko.observable().extend({ minnumber: "5"}).extend({ maxnumber: "20" }); } ko.extenders.minnumber = function(target, minvalue){ target.haserror = ko.observable(); target.errormessage = ko.observable(); function validate(newvalue){ target.haserror(parseint(newvalue) < parseint(minvalue) ? true : false); target.errormessage(parseint(newvalue) < parseint(minvalue) ? "minval" : ""); } validate(target()); target.subscribe(validate); return target; }; ko.extenders.maxnumber = function(target, maxvalue){ target.haserror = ko.observable(); target.errormessage = ko.observable(); function validate(newvalue){ target.haserror(parseint(newvalue) > parseint(maxvalue) ? true : false); target.haserror(parseint(newvalue) > parseint(maxvalue) ? "maxval" : ""); } validate(target()); target.subscribe(validate); return target; }; ko.applybindings(new appviewmodel());
and following html
<input data-bind="value: myvalue, valueupdate: 'afterkeydown'"/><br/> <span data-bind="text: myvalue"></span> <span data-bind="text: myvalue.errormessage"></span> <span data-bind="text: myvalue.haserror"></span>
what trying achieve validation on observable minimum , maximum integer value. code works http://jsfiddle.net/gazzo100uk/nctpx/5/ unsure why works instance why maxnumber not clear errormessage property in validate function if integer less 5 in example or vice versa min.
what order these functions fired?
like say, want don't understand how working , honest never expected work.
can shed light please?
regards, gary
i think main issue causing "work" not setting errormessage
in maxnumber
extender, not being cleared inappropriately:
function validate(newvalue){ target.haserror(parseint(newvalue) > parseint(maxvalue) ? true : false); target.haserror(parseint(newvalue) > parseint(maxvalue) ? "maxval" : ""); }
Comments
Post a Comment