我在過去的幾天裏一直在努力理解我做錯了什麼。 我正在實施我的應用程序列表的基礎結構,其中可能包括paging/infinite scroll/filtering/grouping/
等。該實現基於擴展控制器(不是陣列控制器,我想要成爲Ember 2.0安全),其中包含數據屬性爲content
的數組。Ember.computed.sort屬性沒有更新
我正在使用Ember.computed.sort進行排序,它正在工作,但當我嘗試更改分揀機時,我遇到了一個奇怪的行爲。 在displayContent
內沒有更新,即使更新了定義sortingDefinitions
。
這會導致一個奇怪的行爲,它只會排序如果我sort
它兩次,就好像排序是異步的。
我使用Ember 1.5
(但它也發生在1.8) (附加的代碼解釋我的問題的一個片段)
sortingDefinitions: function(){
var sortBy = this.get('sortBy');
var sortOrder = this.get('sortOrder') || 'asc';
if (_.isArray(sortBy)) {
return sortBy;
}
else {
return (sortBy ? [sortBy + ':' + sortOrder] : []);
}
}.property('sortBy', 'sortOrder'),
sortedContent: Ember.computed.sort('content', 'sortingDefinitions'),
displayContent: function() {
var that = this;
var sortBy = this.get('sortBy');
var sortOrder = this.get('sortOrder');
var list = (sortBy ? this.get('sortedContent') : this.get('content'));
var itemsPerPage = this.get('itemsPerPage');
var currentPage = this.get('currentPage');
var listItemModel = this.get('listItemModel');
return list.filter(function(item, index, enumerable){
return ((index >= (currentPage * itemsPerPage)) && (index < ((currentPage + 1) * itemsPerPage)));
}).map(function(item) {
var listItemModel = that.get('listItemModel');
if (listItemModel) {
return listItemModel.create(item);
}
else {
return item;
}
});
}.property('content.length', 'sortBy', 'sortOrder', 'currentPage', 'itemsPerPage')
編輯: 通過添加另一個依賴於displayContent(sortedContent固定。 []):
displayContent: function() {
....
}.property('content.length', 'sortBy', 'sortOrder', 'currentPage', 'itemsPerPage' , 'sortedContent.[]')
注意,它適用於我的單元測試的罰款。渲染循環的東西在這裏搞砸了。 – Manu