2012-05-18 28 views
2

我有一個Ember.js應用如下(借用this article上andyMatthews.net):Ember.js傳遞參數從視圖控制器功能

檢視:

<script type="text/x-handlebars" > 
    {{view App.UserTextField}} 
    {{#each App.recentUsersArray.reverse tagName="ul"}} 
     <li>{{this}}</li> 
    {{/each}} 
</script>​ 

應用程序:

App = Ember.Application.create(); 

App.UserTextField = Ember.TextField.extend({ 
    insertNewline: function(){ 
     var term = this.get('value'); 
     App.recentUsersArray.pushObject(term); 
    } 
}); 

App.recentUsersArray = Em.ArrayController.create({ 
    content: ['noelle', 'evan', 'mason'], 
    reverse: function(){ 
     return this.get('content').toArray().reverse(); 
    }.property('[email protected]').cacheable(), 
});​ 

但我想從視圖傳遞參數到App.recentUsersArray.reverse(例如,設置要返回的反轉項目的數量)。我碰到一個問題,因爲雖然你可以接受控制器功能上的參數,但它看起來並不像你可以從視圖中傳遞它。我想象這樣的事情,如果你想在參數3傳遞到反向功能的控制器上:

{{#each App.recentUsersArray.reverse(3) tagName="ul"}} 
    <li>{{this}}</li> 
{{/each}} 

但它拋出一個錯誤(未被捕獲的錯誤:解析錯誤)...想法?最終目標是創建三個<ul>,每個具有不同數量的元素而不是爲每個長度創建不同的函數(即,App.recentUsersArray.reverseThree(),App.recentUsersArray.reverseFive()等)。我也不想製作三個不同的控制器,因爲每個<ul>都應該使用相同的數據源,只是切片不同。

+0

你必須閱讀有關性理解爲什麼之前如何計算工作你要求的是沒有意義的。 –

回答

2

是的,Ember可以被看作是一個奇怪的範例。也許嘗試:

App.recentUsersArray = Em.ArrayController.create({ 
    recentCount: 3 
    content: ['noelle', 'evan', 'mason'], 
    reverse: function(){ 
     var max = this.get('recentCount'); 
     return this.get('content').reverse().slice(0, max) 
    }.property('[email protected]', 'recentCount').cacheable(), 
});​ 

//some event handler 
App.recentUsersArray.set('recentCount', count) 

我不認爲toArray()是必要的,再加上文檔說,它並不能保證元素的順序返回: http://docs.emberjs.com/#doc=Ember.Enumerable&method=.toArray&src=false

相關問題