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」を指定し、「show」内のルートとして「/:contactid」を指定すると、ブラウザーの URL でたとえば「/contacts/3」が取得され、すべて問題ありません。

ただし、doShowContact では、 「contactid」ではなく「contact_id」コンテキストとして指定し、 「/:contactid」ではなく「/:contact_id」ルートとして指定した場合。ブラウザの URL に「/contacts/undefined」が表示されます。

それを説明する方法はありますか?ありがとう!

4

1 に答える 1

4

contactidプロパティを持つオブジェクトを偽造するのではなく、単純に contact インスタンスを渡す必要があります。

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 に答える