我有一個搜索/過濾字段,我希望能夠過濾集合的任何值。我擁有的數據如下:Backbone.js過濾集合中的任何值
exports.administrators = [
{
id: 1,
firstName: "User1",
lastName: "Tester",
phone: "781-000-0000",
email: "[email protected]",
privileges: "view-only"
}, {
id: 2,
firstName: "Mickey",
lastName: "Mouse",
phone: "781-123-4567",
email: "[email protected]",
privileges: "all"
}, {
id: 3,
firstName: "Snow",
lastName: "White",
phone: "781-890-1234",
email: "[email protected]",
privileges: "all"
}, {
id: 4,
firstName: "Anakin",
lastName: "Skywalker",
phone: "888-874-9084",
email: "[email protected]",
privileges: "view-only"
}, {
id: 5,
firstName: "Obi-one",
lastName: "Kenobi",
phone: "908-765-5432",
email: "[email protected]",
privileges: "all"
}, {
id: 6,
firstName: "Master",
lastName: "Yoda",
phone: "876-654-2134",
email: "[email protected]",
privileges: "view-only"
}, {
id: 7,
firstName: "Han",
lastName: "Solo",
phone: "781-456-3209",
email: "[email protected]",
privileges: "all"
}, {
id: 8,
firstName: "Neo",
lastName: "TheOne",
phone: "781-000-0000",
email: "[email protected]",
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
- 是否有這樣做的更優雅的方式?
感謝您提前提供的所有幫助。
乾杯,
Kianosh
更新功能:
我已經從@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
這三段代碼沒有連接,也沒有解釋如何連接它們。你是否從你顯示的數據創建了一個集合?什麼收藏? 「events」屬性是否與呈現該集合的視圖相關? 「App.Utils」有什麼用?請提供有關此代碼如何綁定在一起的更多詳細信息,以便我們可以更好地瞭解哪些功能無法正常工作。 –
'App.Utils.filterCollection'應該做什麼?也許你可以添加一些預期輸出的例子。 – rdiazv
@gryzzly我不想用所有的代碼填滿屏幕。數據在視圖中使用的集合中獲取(AdministratorsView)。 App.Utils.filterCollection是一個全局函數,我將能夠傳遞任何集合和過濾器值,並且能夠返回與給定集合中的任何值相匹配的過濾集合。我希望這是有道理的。 – Kianosh