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>に、それぞれ要素の数が異なる3つのを作成することです。また、3つの異なるコントローラーを作成したくありません。これは、それぞれが同じデータソースを使用し、スライスが異なるためです。App.recentUsersArray.reverseThree()App.recentUsersArray.reverseFive()<ul>

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 に答える