我有一个示例路线:
this.route('client', {path: ':id'});
我可以在我的路线中访问此内容:
model: function(params) {
console.log(params.id);
}
如何访问控制器中的:id
?
答案 0 :(得分:8)
这是我在我的应用程序中执行此操作的方式。不确定这是否是最佳方法。
App.IndexRoute = Em.Route.extend({
model: function(params) {
this.set('params', params);
},
setupController: function(controller, model) {
controller.set('params', this.get('params'));
this._super(controller, model);
}
});
或者,您也可以在控制器内的容器上进行查找。但我真的不认为这是一个好方法。这是一个例子。
this.get('container').lookup('router:main').router.currentHandlerInfos
.findBy('name','index').params
答案 1 :(得分:1)
您可以利用路线中的序列化功能。这是它的API Documentation。但是,在您的上下文中,您可以这样做:
App.IndexRoute = Em.Route.extend({
model: function(params) {
console.log(params.client_id);
},
serialize: function(model){
return { client_id : model.id };
}
});
让我知道这是否有效!
我还发现路线定义中有错误。它可能应该是
this.route('client', {path: '/:client_id'});
或
this.route('client', {path: '/client/:client_id'});
答案 2 :(得分:1)
如果您的ID恰好是模型的一部分,您可以从模型本身进行检索。 例如,如果您有一个路径,其中对象Bill作为模型,并且路径bill /:billId,则可以通过以下方式检索它:
this.get('模型&#39)。ID
答案 3 :(得分:0)
我刚刚遇到这个问题,因为我也想知道最好的方法是什么。我选择通过从模型返回哈希的路线,而不是在路线中设置参数。
因此,在您的情况下,我会执行以下操作:
model() {
Ember.RSVP.hash({client: <get client>, id: id});
}
然后在控制器或模板中,我可以通过调用
来访问客户端model.client
并通过调用
获取idmodel.id
我个人认为,与在路线上设置参数相比,这是一种更清晰的方式来访问id。当然我假设模型上尚未设置id。否则这整个练习毫无意义。