我一直在尝试使用collection.where对backbone.js集合执行不区分大小写的搜索,我刚刚意识到集合中搜索值和模型字段值的大小写必须匹配。我找到了这个 例子,但是我在哪里覆盖行为或者有替代方法吗?谢谢
collection.findWhere({ 'Fname': val })
和
collection.where({ 'Fname': val })
// 仅当字符串大小写匹配时才有效。
我一直在尝试使用collection.where对backbone.js集合执行不区分大小写的搜索,我刚刚意识到集合中搜索值和模型字段值的大小写必须匹配。我找到了这个 例子,但是我在哪里覆盖行为或者有替代方法吗?谢谢
collection.findWhere({ 'Fname': val })
和
collection.where({ 'Fname': val })
// 仅当字符串大小写匹配时才有效。
var myCollection = Backbone.Collection.extend({
// define your own case insensitive where implemented using .filter
iwhere : function( key, val ){
return this.filter( function( item ){
return item.get( key ).toLowerCase() === val.toLowerCase();
});
}
});
我选择在我的集合中覆盖 where 和 findWhere 以允许不区分大小写的选项:
//case-insensitive where
where: function(attrs, first, options){
options = options || {};
if (_.isEmpty(attrs)) return first ? void 0 : [];
return this[first ? 'find' : 'filter'](function(model) {
for (var key in attrs) {
if (options.caseInsensitive) {
if (attrs[key].toLowerCase() !== model.get(key).toLowerCase()) return false;
} else {
if (attrs[key] !== model.get(key)) return false;
}
}
return true;
});
},
findWhere: function(attrs, options) {
return this.where(attrs, true, options);
}
并通过以下方式调用它:
collection.findWhere({username: "AwEsOmE"}, {caseInsensitive: true});
它并不完全漂亮,但原始实现也不是。o_o
将其作为拉取请求打开也很好,但将 where 函数中的“第一个”变量重构为选项的关键。它在我要做的事情清单上。