我正在尝试使用rails / ember.js编写一个小博客应用程序。可以标记帖子(使用act-as-taggable-on),并且可以通过访问“/ t /:tag_name”查看具有特定标签的所有帖子的列表。我在post_controller.rb的索引操作中使用“tagged_with”进行搜索(如果我没有记错的话,通过tagged_route.js中的“find”调用)以及当我直接访问页面时(例如使用“/ t / first”) “)一切正常。
但是,当我转到其中一个帖子的页面并点击其中一个标签的链接时,ember.js会停留在帖子控制器(.js一个)中,同时转到正确的地址并且我获取以下错误消息之一:
我试过添加
controllerFor: function() {
return EmberBlog.TaggedController;
}
到tagged_route.js,但标签页面上找到的帖子列表仍为空。 嗯,有没有人知道我可能做错了什么?
这里是(可能)相关文件:
我的router.js:
EmberBlog.Router.map(function() {
// default index route to / loading index template
this.resource("posts", function() { // implicit path and template name (same as route name)
//this.route('new');
});
this.resource('post', { path: '/posts/:post_id' });
this.resource('tagged', { path: '/t/:tag_name' });
this.route("about");
});
EmberBlog.reopen({
location: 'history'
});
我的tagged_route.js:
EmberBlog.TaggedRoute = Ember.Route.extend({
model: function(params) {
Em.Logger.info( params );
var posts = EmberBlog.Post.find({'tag_name': params.tag_name});
return posts;
}//,
//controllerFor: function() {
// return EmberBlog.TaggedController;
//}
});
我的post_controller.rb中的索引操作:
def index
if params[:tag_name]
posts = Post.tagged_with(params[:tag_name])
else
posts = Post.all
end
render json: posts, meta: { total: posts.count }
end
my tagged.handlebars:
<h2>Tagged Posts</h2>
<div id="posts">
{{log controller}}
<ul>
{{#each post in controller}}
{{view EmberBlog.PostInListView contentBinding="post"}} //--> <li>{{#linkTo post post}}{{post.title}}{{/linkTo}}</li>
{{else}}
Sorry, no posts to display
{{/each}}
</ul>
</div>
我post.handlebars的相关部分:
...
<div class="taglist">
<ul class="inline">
Tags:
{{#each tag in tagList}}
<li>{{#linkTo tagged tag}}{{tag}}{{/linkTo}}</li>
{{else}}
...
答案 0 :(得分:1)
我在this question答案的帮助下找到了问题。
问题是linkTo没有在我的TaggedRoute中触发模型钩子,TaggedController(一个ArrayController)试图使用linkTo传递的字符串。
我通过使TaggedController成为具有计算属性postsWithTag的ObjectController来解决它
EmberBlog.TaggedController = Ember.ObjectController.extend({
content: null,
postsWithTag: function() {
var posts = EmberBlog.Post.find({'tag_name': this.get('content')});
return posts;
}.property('@content')
});
并将TaggedRoute更改为
EmberBlog.TaggedRoute = Ember.Route.extend({
model: function(params) {
Em.Logger.info( params );
var tag = params.tag_name;
return tag;
}
});
和tagged.handlebars到
<h2>Tagged Posts</h2>
<div id="posts">
{{log controller}}
<ul class="unstyled">
{{#each post in postsWithTag}}
{{view EmberBlog.PostInListView contentBinding="post"}}
{{else}}
Sorry, no posts to display
{{/each}}
</ul>
</div>