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