caseInsensitive オプションを許可するために、コレクションの 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 関数の「最初の」変数をオプションのキーにリファクタリングします。それは私のやることリストにあります。