Ember.js 如何解决代码气味:输出格式的计算属性

Ember.js 如何解决代码气味:输出格式的计算属性,ember.js,Ember.js,嗨,我有这个余烬模型。likeMessage computed属性正在生成我在模板中使用的字符串。(见下文) 这是可行的,但我不喜欢在我的模型中使用这种“视图层代码”。什么是更好的方法 /** * @class * @name Entry */ James.Entry = Ember.Object.extend( /** @lends Entry# */ { likes: [], likeMessage: function() {

嗨,我有这个余烬模型。likeMessage computed属性正在生成我在模板中使用的字符串。(见下文) 这是可行的,但我不喜欢在我的模型中使用这种“视图层代码”。什么是更好的方法

/**
 * @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")
    }
); 

您可以将该方法移动到EntryView,然后在模板中调用view.likeMessage


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

用于表示的计算属性属于Ember中的控制器层。要轻松访问模型,可以使用
Ember.ObjectController
并将
content
属性设置为要显示的模型实例


我最近做了一个演示,介绍了在设计一个余烬应用程序时应该做些什么。也许它会有用:

我同意,这会好一点。我有没有可能把这个逻辑放到我的模板里?。我曾考虑编写一个车把助手来格式化likecount。但我只需要在一个模板中使用这个助手,对我来说,它非常适合视图,或者像Luke建议的那样,适合控制器。排序和分页都是在控制器中完成的,这取决于您对这个特定属性的看法,它可以被视为一组like的特殊表示,对吗?我选择视图仅仅是因为它是该视图中特定顶部的集合和格式。在另一个视图上下文中,您可能有显示更多姓名的空间。例如,Thaks,我看了您的视频,这很有意义。所以现在我正在尝试实现它。我有一个
EntryController
类型的
Ember.ArrayController
,它保存一个条目列表。正如您在上面的模型中所看到的,他们每个人都有一个喜欢的列表。那么,我该如何将这些片段组合起来呢?我不太知道在这种情况下如何使用
ObjectController
Likes:
{{likeMessage}}