Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ember.js中访问控制器中的动态段?_Ember.js - Fatal编程技术网

如何在Ember.js中访问控制器中的动态段?

如何在Ember.js中访问控制器中的动态段?,ember.js,Ember.js,我有一个例子: this.route('client', {path: ':id'}); 我可以通过以下方式在我的路线中访问此项: model: function(params) { console.log(params.id); } 如何在控制器中访问:id?这是我在应用程序中的操作方式。不确定这是否是最好的方法 App.IndexRoute = Em.Route.extend({ model: function(params) { this.set('params',

我有一个例子:

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) {
    console.log(params.client_id);
  },
  serialize: function(model){
    return { client_id : model.id };
  }
});
让我知道这是否有效

我还注意到您的路线定义中有一个错误。应该是这样的

this.route('client', {path: '/:client_id'});


我只是遇到了这个问题,因为我也想知道做这件事的最好方法是什么。我选择通过从模型返回散列的路径,而不是在路径中设置参数

因此,在您的情况下,我将执行以下操作:

model() {
  Ember.RSVP.hash({client: <get client>, id: id});
}
并通过呼叫获取id

model.client
model.id

我个人认为,与在路由上设置参数相比,这是一种更干净的访问id的方法。当然,我假设模型上尚未设置id。否则,整个练习将毫无意义。

如果您的id恰好是模型的一部分,您可以从模型本身检索。 例如,如果您有一个以对象Bill作为模型的路由,并且路径bills/:billId,则在控制器上,您可以通过以下方式检索它:


this.get('model').id

我还建议跳过setupController部分,只从model()hook返回哈希。@XLII在我的用例中,我还需要返回实际的模型。因此,我对params.YMMV使用了setupController方法,但是如果这是唯一的setupController角色,那么您可以按照
函数(c,p){return{obj:…,params:p};}
来做一些事情,但这是需求和个人偏好的问题。这是否回答了问题?
model.id