我有一个示例路线:
this.route('client', {path: ':id'});
我可以在我的路线中访问这个:
model: function(params) {
console.log(params.id);
}
我如何访问 :id
在我的控制器?
我有一个示例路线:
this.route('client', {path: ':id'});
我可以在我的路线中访问这个:
model: function(params) {
console.log(params.id);
}
我如何访问 :id
在我的控制器?
这就是我在我的应用程序中这样做的方式。不确定这是否是最佳方法。
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
这就是我在我的应用程序中这样做的方式。不确定这是否是最佳方法。
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
您可以利用路线中的序列化功能。这是 API文档 为了它。但是,在您的上下文中,您可以这样做:
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'});
如果您的id恰好是模型的一部分,您可以从模型本身检索。 例如,如果您有一个路径,其中对象Bill作为模型,并且路径bill /:billId,您可以通过以下方式检索它:
this.get( '模式')。ID
我刚刚遇到这个问题,因为我也想知道最好的方法是什么。我选择通过从模型返回哈希的路线,而不是在路线中设置参数。
所以在你的情况下,我会做以下事情:
model() {
Ember.RSVP.hash({client: <get client>, id: id});
}
然后在控制器或模板中,我可以通过调用访问客户端
model.client
并通过调用获取id
model.id
我个人认为,与在路线上设置参数相比,这是一种更简洁的方式来访问id。当然我假设id尚未在模型上设置。否则这整个练习毫无意义。