[英]Seo routes with ember serializer
我遵循示例emberjs指南
...
this.route('author', { path: '/author/:post_userName' });
...
App.PostsAuthorRoute = Ember.Route.extend({
model: function(params) {
return App.Post.find({userName : params.userName});
},
serialize:function(model) {
return { post_userName: model.get('userName')};
}
});
然后是这里的链接
Author {{#linkTo 'posts.author' post }} {{post.userName }} {{/linkTo}}
有趣的是,当我单击链接时,出现路由错误
Error while loading route: TypeError {}
Uncaught TypeError: Object [Object Object] has no method 'slice'
但是,当我重新加载页面时,将显示完整数据。
我该如何解决路由错误,实际上我不明白为什么会收到错误并在重新加载页面时得到解决
这是类似情况的jsbin。
问题出在传递给link-to
对象的对象link-to
。 您正在这样做:
Author {{#linkTo 'posts.author' post }} {{post.userName }} {{/linkTo}}
通过后, Post
到author
路线。 将模型传递给link-to
导致跳过路线上的model
钩子,而改用传递的模型。 当您单击reload时,将执行model
挂钩,并将PostsAuthor
路由的模型设置为Post
对象的集合,然后事情将按预期进行。
做事在Ember Way(TM)中,您希望拥有一个与Post
模型相关的Author
模型。 然后,你就会有一个AuthorRoute
和AuthorController
这needs
一个PostsController
。 在链接中,您将传递post.author
,然后使用setupController
钩子为PostsController
的集合进行PostsController
。 像这样:
App.Post = DS.Model.extend({
author : DS.belongsTo('post'),
title : DS.attr('string')
});
App.Author = DS.Model.extend({
name : DS.attr('string'),
userName : DS.attr('string')
});
App.AuthorRoute = DS.Route.extend({
model : function(){ // not called when the author is passed in to #link-to
return this.store.find('author',{userName : params.post_userName})
},
setupController : function(controller,model){
this._super(controller,model);
this.controllerFor('posts').set('content', this.store.find('post',{userName : model.userName}))
}
});
App.AuthorController = Ember.ObjectController.extend({
needs : ['posts']
});
App.PostsController = Ember.ArrayController.extend({
sortProperties : ['name']
});
然后是模板:
Author {{#linkTo 'posts.author' post.author }} {{post.author.name }} {{/linkTo}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.