0

こんにちは私はこの残り火モデルを持っています。likeMessageの計算プロパティは、テンプレートで使用している文字列を作成しています。(以下を参照)これは機能しますが、モデルにこの「ビューレイヤーコード」を含めるのは快適ではありません。より良いアプローチは何でしょうか?

/**
 * @class
 * @name Entry
 */
James.Entry = Ember.Object.extend(
  /** @lends Entry# */
  {
        likes: [],

        likeMessage: function() {
            var likes = this.get("likes"),
            withNameCount = 0,
            names = [],
            likeCount = likes.length;

            for(;withNameCount < likes.length && withNameCount < 2; withNameCount++) {
                names.push(likes[withNameCount].name);
            }

            if(likeCount == 0) {
                return "Nobody likes this";
            } else if(likeCount == 1) {
                return names[0]+ " likes this";
            } else if(likeCount <= 2) {
                return names.join(" and ")+" like this";
            } else {
                return names.join(", ")+" and "+(likes.length-2)+" others like this";
            }
        }.property("likes")
    }
); 

私のテンプレート:

Likes:
{{likeMessage}}
4

2 に答える 2

2

表示用の計算されたプロパティは、Emberのコントローラーレイヤーに属します。モデルに簡単にアクセスするには、を使用して、表示しているモデルインスタンスにプロパティをEmber.ObjectController設定します。content

私は最近、Emberアプリを設計するときに何がどこに行くのかについてのプレゼンテーションをまとめました。おそらくそれは役に立つかもしれません:http ://www.lukemelia.com/blog/archives/2012/08/23/architecting-ember-js-apps/

于 2012-09-18T21:50:48.940 に答える
0

そのメソッドをそのままEntryViewに移動してから、テンプレートでview.likeMessageを呼び出すことができます。

Viewクラスを知らなければ、これ以上具体的にすることはできませんが、通常、すべてのモデルに対応するビューがあります(多くの場合、2つ、1つは「単数形」、もう1つはモデルのコレクションまたは単一インスタンスを処理するための「複数形」)。

于 2012-09-18T18:52:28.263 に答える