컬렉션에 comparator
방법을 제공하면 원하는 것을 얻을 수 있습니다.
예 :
ModelCollection = Backbone.Collection.extend({
comparator: function(a, b) {
if (a.get("name") > b.get("name")) return 1;
if (a.get("name") < b.get("name")) return -1;
if (a.get("name") === b.get("name")) return 0;
},
initialize: function() {
this.on('change:name', function() { this.sort() }, this);
}
});
이 예에서 comparator
이 컬렉션의 원인이됩니다은 내부 모델의 name
속성으로 오름차순으로 정렬합니다.
models
중 하나의 속성을 변경할 때 컬렉션이 자동으로 정렬되지 않습니다. 기본적으로 정렬은 새 모델을 만들고 컬렉션에 추가 할 때만 발생합니다. 그러나 comparator
은 방법에 의해이 사용됩니다.
위 코드는 임의의 change
에서 name
속성에 컬렉션을 다시 정렬하는 이벤트 수신기를 설정하여이 점을 이용합니다. models
.
CollectionView = Backbone.View.extend({
initialize: function() {
this.collection = new ModelCollection();
this.collection.on('all', function() { this.render() }, this);
},
render: function() {
this.$el.html(this.collection.toJSON());
}
});
그것을 :)
있어 :
이 그림을 완성하기 위해, 우리는 반드시 그것을 변경에-을 렌더링 다시 확인하기 위해 수집과 관련된
View
의 적절한 이벤트 리스너를 설정
Backbone documentation에서
관련 발췌 : 기본적으로
이 더있다 컬렉션에 대해 comparator
comparator
을 정의하면 콜렉션을 정렬 된 순서로 유지 보수하는 데 사용됩니다. 즉, 모델이 추가되면 올바른 인덱스 인 collection.models
에 삽입됩니다. 비교기는 sortBy
(단일 인수를 사용하는 함수 전달), sort
(두 개의 인수가 필요한 비교 함수 전달) 또는 정렬 기준으로 사용할 특성을 나타내는 문자열로 정의 할 수 있습니다. [...] 나중에 모델 속성을 변경하면 comparator
이 포함 된 컬렉션이 자동으로 다시 정렬되지 않으므로 주문에 영향을주는 모델 속성을 변경 한 후 sort
으로 전화 할 수 있습니다.