0

嗨,我有这个 ember 模型。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

在不知道您的视图类的情况下,我无法更具体,但通常您会对每个模型都有一个相应的视图(通常是两个,一个“单数”和一个“复数”,用于处理模型的集合或单个实例)。

于 2012-09-18T18:52:28.263 回答