2015-08-27 70 views
1

我的控制器中有以下代碼。它首先根據搜索屬性過濾一組結果,然後對結果進行排序。Ember.js連續計算屬性的正確語法

results: function() { 
 

 
    var searchTerm = this.get('searchTerm'), 
 
     results = this.get('content'); 
 

 
    if (searchTerm) { 
 
     results = results.filter(function(item) { 
 
     return item.get('name').toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; 
 
     }); 
 
    } 
 

 
    }.property('content', 'searchTerm',), 
 

 
sortedResults: Ember.computed.sort('results', 'sortProperties'), 
 
    
 
sortProperties: function() { 
 
    var order = this.get('ordering'); 
 
    if (order === 0) { 
 
     return ['name:asc']; 
 
    } else if (order === 1) { 
 
     return ['name:desc']; 
 
    } 
 
    }.property('ordering'),

模板遍歷sortedResults:

{{#each sortedResults as |job|}} 
 
    {{job-table-row model=job}} \t 
 
{{/each}}

上述工作正常。我想最後將sortedResults設置爲切片函數來顯示有限數量的結果。我曾嘗試以下:

slicedResults: function() { 
 
    var sortedResults = this.get('sortedResults'); 
 
    return sortedResults.slice(0,10); 
 
}.property('sortedResults'),

然後遍歷slicedResults:

{{#each slicedResults as |job|}} 
    {{job-table-row model=job}} 
{{/each}} 

在這種情況下,不返回任何結果。在切片函數中使用排序結果並將結果輸出到模板的正確方法是什麼?

+0

你可以在'slicedResults'屬性中設置'console.log(this.get('sortedResults'))''以確保'sortedResults'中確實存在某些內容嗎? – QuantumLicht

回答

0

我覺得你還需要觀察sortedResults陣列

slicedResults: function() { 
    var sortedResults = this.get('sortedResults'); 
    return sortedResults.slice(0,10); 
}.property('sortedResults', 'sortedResults.length', '[email protected]') 
+0

謝謝 - 觀察陣列的長度是重要的。 'sortedResults。@ each'的目的究竟是什麼?我沒有測試過,而且一切似乎仍然正常。 – AJP

+1

當您想要觀察嵌套在對象中的屬性的更改時,會使用「@ each」。例如,你可能想觀察'sortedResults。@ each.title'。 *重要注意事項*:'@ each'只支持一層嵌套。例如,你不能執行'sortedResults。@ each.someArray。@ each.value'。請參閱以供參考:https://gist.github.com/meelash/5785328我不知道問題是否已解決。 – QuantumLicht

1

更高性能的方式,我們可以使用array.[]計算屬性的長度。

slicedResults: function() { 
    var sortedResults = this.get('sortedResults'); 
    return sortedResults.slice(0,10); 
}.property('sortedResults.[]') 

這是一個真正有用的blog post關於數組計算屬性之間的差異。