Skip to content

Instantly share code, notes, and snippets.

@valerysntx
Forked from togakangaroo/knockoutifyUnderscore
Last active August 29, 2015 14:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save valerysntx/c52feb39a686d7e2f8c5 to your computer and use it in GitHub Desktop.
Save valerysntx/c52feb39a686d7e2f8c5 to your computer and use it in GitHub Desktop.
Underscore functions transparently unwrap knockout observables
//make a limited set of underscore functions transparently unwrap knockout observables
(function knockoutifyUnderscore(_) {
var unwrap = ko.utils.unwrapObservable;
//These can be shimed in a standard way
var koFriendly = ['map', 'filter', 'find', 'each', 'findBy', 'first', 'last', 'head', 'tail', 'union', 'compact', 'flatten', 'difference', 'without'];
var oldMap = _.map;
for (var _i = 0; _i < koFriendly.length; _i++) {
(function(fnName) {
var originalFn = _[fnName];
_[fnName] = function() {
var args;
args = oldMap(arguments, unwrap);
return originalFn.apply(_, args);
};
})(koFriendly[_i]);
}
//These underscore commands need special attention
_.mixin({
where: function(collection, query) {
query = _.mapObject(query, function(val, key){
return [key, unwrap(val)]
});
return _.filter(collection, function(item){
return _.all(query, function(queryVal, key) {
return queryVal === unwrap(item[key]);
})
});
}
});
})(_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment