私は間違っていることを理解しようと、最後の数日間私の頭を割ってきました。 paging/infinite scroll/filtering/grouping/
などを含む私のアプリのリストのインフラストラクチャを実装しています。実装はデータを保持するcontent
配列プロパティを持つコントローラ(配列コントローラではなく、Ember 2.0を安全にしたい)に基づいています。Ember.computed.sortプロパティが更新されていません
ソートにEmber.computed.sortを使用していますが、動作していますが、ソーターを変更しようとすると奇妙な動作が発生します。 sortingDefinitions
定義が更新されても、sortedContent
はdisplayContent
内で更新されません。
これは、並べ替えが非同期であるかのように、sort
を2回だけ並べ替えるという奇妙な動作を引き起こします。
(私の問題を説明するコードスニペットを添付) 私は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