Skip to content

Instantly share code, notes, and snippets.

@smailliwcs
Created September 22, 2020 15:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smailliwcs/d43cefe5620d1300ba3079dd104e973e to your computer and use it in GitHub Desktop.
Save smailliwcs/d43cefe5620d1300ba3079dd104e973e to your computer and use it in GitHub Desktop.
Knockout extender: filter
ko.extenders.filter = function (target, pattern) {
var result = ko.computed({
read: target,
write: function (value) {
if (typeof value !== "string") {
target(value);
return;
}
var current = target();
var filtered = value.replace(pattern, "");
if (filtered !== current) {
target(filtered);
} else if (value !== current) {
target.notifySubscribers(filtered);
}
}
}).extend({ notify: "always" });
result(target());
return result;
};
var x = ko.observable().extend({ filter: /[aeiou]/gi });
x("hello");
console.log(x());
x("WORLD");
console.log(x());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment