我在使用models
访问的路由的controller
内获取{{link-to}}
时遇到问题
根据我的理解(在阅读http://emberjs.com/guides/routing/asynchronous-routing/之后),当从model
访问路由时,route
的{{1}}挂钩不会被调用。 {{link-to 'route' model}}
会直接传递给model
。这是Ember确保不会不必要地调用controller
的方式。
例如,如果我转到AJAX
,我需要将{{link-to 'post-review' post}}
以上的post model
传递给PostReviewController
。
App.Router.map(function () {
...
this.resource('post-review' , {path: '/post-review/:id'});
...
});
PostReviewRoute = Ember.Route.extend({
//method doesn't get called
model: function(params){
return Em.RSVP.hash({
post: this.store.find('post', params.id),
reviewTypes: this.store.find('reviewType')
});
}
});
ReviewType
是与Post
无关的模型,因此我可以使用post.reviewType
直接访问它。 post
有多个reviews
。评论有reviewType
。但我必须在组合框中显示所有reviewTypes
。
无论如何,model
挂钩未被调用,我无法从this.get('reviewTypes')
访问PostReviewController
。我了解beforeModel
或afterModel
个钩子用于此目的:当models
从{controller
访问时,将route
传递给link-to
1}}而不是直接来自浏览器URL。文档没有说明如何做到这一点!如果你知道怎么做,请赐教!
谢谢!
答案 0 :(得分:2)
setupController救援,在您的路线中使用setupController挂钩来设置reviewTypes,如下所示:
PostReviewRoute = Ember.Route.extend({
setupController: function(controller, model){
var postId = model.get('id');
this._super.apply(this, arguments);
this.store.find('reviewType').then((records)=> {
controller.set('reviewTypes', records);
});
this.store.find('post', postId).then(....)
},
// your code
});
您现在应该可以致电this.get('reviewTypes')
。
让我知道这是否适合你。