2016-09-26 8 views
0

私は間違っていることを理解しようと、最後の数日間私の頭を割ってきました。 paging/infinite scroll/filtering/grouping/などを含む私のアプリのリストのインフラストラクチャを実装しています。実装はデータを保持するcontent配列プロパティを持つコントローラ(配列コントローラではなく、Ember 2.0を安全にしたい)に基づいています。Ember.computed.sortプロパティが更新されていません

ソートにEmber.computed.sortを使用していますが、動作していますが、ソーターを変更しようとすると奇妙な動作が発生します。 sortingDefinitions定義が更新されても、sortedContentdisplayContent内で更新されません。

これは、並べ替えが非同期であるかのように、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.[]') 
+0

ノート。レンダリングループのあるものはここで混乱します。 – Manu

答えて

1

あなたのソート機能は、アレイ全体sortingDefinitionsの代わりに、配列の各要素を見ています。配列が文字列またはその他の変数に変更された場合、配列の要素が変更された場合は更新されますが、更新されません。

、正しく計算されたプロパティの更新を確保することが次のようになりますので、配列の最後に.[]を追加するには:それは私のユニットテストで正常に動作することをEmber.computed.sort('content', 'sortingDefinitions.[]')

+0

が、配列全体が置き換えられています。本当に奇妙な部分は、それが2回ソートされるときです。 (とにかく、あなたのソリューションを試して、とにかく、うまくいきませんでした):( – Manu

+0

OK、問題を見つけました、それは異なっていません。 – Manu

関連する問題