2

我有一个 Ember.js 应用程序,如下所示(借自andyMatthews.net 上的这篇文章):

看法:

<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('content.@each').cacheable(),
});​

但我想从视图中向 App.recentUsersArray.reverse 传递一个参数(例如,设置要返回的反转项目的数量)。我遇到了一个问题,因为虽然您可以接受控制器函数上的参数,但您似乎无法从视图中传递它。如果您想将参数 3 传递给控制器​​上的反向函数,我正在想象这样的事情:

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

但它会引发错误(未捕获的错误:解析错误)......想法?最终目标是创建三个<ul>,每个都有不同数量的元素,而不为每个长度创建不同的函数(即App.recentUsersArray.reverseThree(),App.recentUsersArray.reverseFive()等)。我也不想制作三个不同的控制器,因为每个<ul>'s 应该使用相同的数据源,只是切片不同。

4

1 回答 1

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('content.@each', 'recentCount').cacheable(),
});​

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

我认为没有toArray()必要,而且文档说它不能保证返回元素的顺序:http: //docs.emberjs.com/#doc=Ember.Enumerable&method=.toArray&src=false

于 2012-05-21T06:58:08.950 回答