コレクションの任意の値でフィルタリングできるようにしたい検索/フィルター フィールドがあります。私が持っているデータは次のとおりです。
exports.administrators = [
{
id: 1,
firstName: "User1",
lastName: "Tester",
phone: "781-000-0000",
email: "user1.tester@email.com",
privileges: "view-only"
}, {
id: 2,
firstName: "Mickey",
lastName: "Mouse",
phone: "781-123-4567",
email: "mickey.mouse@disney.com",
privileges: "all"
}, {
id: 3,
firstName: "Snow",
lastName: "White",
phone: "781-890-1234",
email: "snow.white@disney.com",
privileges: "all"
}, {
id: 4,
firstName: "Anakin",
lastName: "Skywalker",
phone: "888-874-9084",
email: "anakin.skywalker@deathstar.com",
privileges: "view-only"
}, {
id: 5,
firstName: "Obi-one",
lastName: "Kenobi",
phone: "908-765-5432",
email: "obi.kenobi@jedi.com",
privileges: "all"
}, {
id: 6,
firstName: "Master",
lastName: "Yoda",
phone: "876-654-2134",
email: "yoda@jedi.com",
privileges: "view-only"
}, {
id: 7,
firstName: "Han",
lastName: "Solo",
phone: "781-456-3209",
email: "han.solo@gmail.com",
privileges: "all"
}, {
id: 8,
firstName: "Neo",
lastName: "TheOne",
phone: "781-000-0000",
email: "neo@matrix.com",
privileges: "all"
}];
ビューは、keyup イベントに基づいてイベントを発生させます。
AdministratorView.prototype.events = {
'click .sub-content th.sort, .sub-content th.sort-up, .sub-content th.sort-down': 'sortTable',
'click .light-btn': 'showAdd',
'keyup #filter-find': 'filterAdministrators'
};
フィルタリングを実行する関数も抽象化しました。
App.Utils.filterCollection = function(collection, filterValue) {
if (filterValue !== "") {
return _.filter(collection.models, function(data) {
var values;
values = _.values(data.attributes);
_.each(values, function(value) {
if (!isNaN(value)) {
value = value.toString();
}
return value.indexOf(filterValue) > 0;
});
});
}
};
私が抱えている問題は次のとおりです。
- filterCollection 関数が undefined を返す
- これを行うよりエレガントな方法はありますか?
事前にご協力いただきありがとうございます。
乾杯、
キアノシュ
更新された機能:
@dbasemanからの入力で関数を更新しました
App.Utils.filterCollection = function(collection, filterValue) {
var filteredCollection;
if (filterValue === "") {
[];
}
return filteredCollection = collection.filter(function(data) {
return _.some(_.values(data.toJSON()), function(value) {
value = !isNaN(value) ? value.toString() : value;
return value.indexOf(filterValue) >= 0;
});
});
};
ただし、関数からまだ空の (または未定義の) 値を取得しています。踏まれました!!
更新 #2 部分的な解決策が見つかりました。ここに jsFiddle があります - http://jsfiddle.net/kianoshp/YWSSp/。正しくフィルタリングされますが、フィルター フィールドを空白にすると、元のデータ セットが表示されるはずです。しかし今、私は空のテーブルを取得します。解決策に取り組んでいますが、ヘルプ/ヒントは役に立ちます。
更新 #3 最終的な解決策は jsFiddle にあります --> http://jsfiddle.net/kianoshp/YWSSp/77/ @dbaseman に感謝