2

在某些情况下,我遇到了路由 url 的问题。这是我的路由器:

contacts: Em.Route.extend({
    route: '/contacts',

    index: Em.Route.extend({
        route: '/',
        connectOutlets: function(router, context) {
            App.contactsController.populate()
            var appController = router.get('applicationController');
            appController.connectOutlet('contactsList');
        }
    }),

    show: Em.Route.extend({
        route: '/:contactid',
        connectOutlets: function(router, context) {
            alert('show contact');
        }
    }),

    doShowContact: function(router, event){
        router.transitionTo('show', {contactid: event.context.id});
    }
}),

当我在 doShowContact 中输入时,如果我将'contactid'指定为上下文,并将'/:contactid'指定为 'show' 中的路由,我将在浏览器 url 中获得例如'/contacts/3',一切正常。

但是在doShowContact 中,如果我指定'contact_id'而不是'contactid'作为上下文,'/:contact_id'而不是'/:contactid'作为路由。我将在浏览器 url 中获得“/contacts/undefined” 。

有没有办法解释它?谢谢!

4

1 回答 1

4

您应该简单地传递联系人实例,而不是伪造具有contactid属性的对象:

doShowContact: function(router, event) {
  var contact = event.context;
  router.transitionTo('show', contact);
}

您还应该modelClass在路线中指定属性:

show: Em.Route.extend({
  route: '/:contact_id',
  modelClass: App.Contact,

  // ...
})
于 2012-07-27T10:52:43.070 回答