컬렉션의 모든 값을 필터링 할 수있는 검색/필터 필드가 있습니다. 다음과 같이 내가 가진 데이터는 다음과 같습니다컬렉션의 모든 값에 대한 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 기능은
- 이 일을 더 우아한 방법이 있나요 정의되지 반환?
미리 도움 주셔서 감사합니다.
건배,
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/ 감사
이
이 세 가지 코드는 연결되지 않았으며 연결 방법은 설명하지 않았습니다. 표시된 데이터로 컬렉션을 만드십니까? 어떤 컬렉션? 'events' 속성은 컬렉션을 렌더링하는 뷰와 관련이 있습니까? 'App.Utils'는 무엇이 있을까요? 이 코드가 어떻게 묶인 지에 대한 자세한 내용을 알려 주시면 제대로 작동하지 않는 것을 더 잘 이해할 수 있습니다. –
'App.Utils.filterCollection'은 무엇을해야합니까? 어쩌면 예상되는 출력의 예를 추가 할 수 있습니다. – rdiazv
@gryzzly 모든 코드로 화면을 채우고 싶지 않았습니다. 데이터는 뷰 (AdministratorsView)에서 사용되는 콜렉션에서 반입됩니다. App.Utils.filterCollection은 모든 컬렉션 및 필터 값을 전달하고 지정된 컬렉션의 모든 값과 일치하는 필터링 된 컬렉션을 반환 할 수있는 전역 함수입니다. 나는 그것이 의미가 있기를 바랍니다. – Kianosh