2012-08-15 32 views
0

这是一个基本的烬路由示例,当在包含动态段的帖子中存在子路由时,该路由不会将URL更新为/ posts正确。所有其他路线(包括动态细分)都会正确更新网址。如果我取出动态片段子路由(在'posts'下称为'show'),则它会正确更新URL。这里的小提琴代码:http://jsfiddle.net/inconduit/NbPpM/3/为什么在使用动态段时,烬路径不会正确更新网址?

,并查看在其更新的URL行动小提琴,看这里:http://fiddle.jshell.net/inconduit/NbPpM/3/show/#

总结 - 当你点击“帖子”的URL应该更新,以显示/职位,但它才不是。

这里的JavaScript:

App = Ember.Application.create({ 
ready: function() { 
     App.initialize(App.Router.create({ enableLogging: true })); 
    } 
}); 

App.Post = Ember.Object.extend({ 
    title: null, 
    body: null 
}); 

App.posts = []; 
App.posts.pushObject(App.Post.create({id:'0', title: "Test post 1", body: "How awesome is Ember.js"})); 
App.posts.pushObject(App.Post.create({id:'1', title: "Test post 2", body: "I love working on awesome projects"})); 
App.posts.pushObject(App.Post.create({id:'2', title: "Test post 3", body: "I like cats"})); 

App.ApplicationController = Ember.ObjectController.extend(); 
App.ApplicationView = Ember.View.extend({ 
    templateName: "application_view" 
}); 

App.PostsController = Ember.ArrayController.extend(); 
App.PostsView = Ember.View.extend({ 
    templateName: 'posts_view' 
}); 

App.PostController = Ember.ObjectController.extend(); 
App.PostView = Ember.View.extend({ 
    templateName: 'post_view' 
}); 

App.AboutController = Ember.ObjectController.extend(); 
App.AboutView = Ember.View.extend({ 
    templateName: 'about_view' 
}); 

App.Router = Ember.Router.extend({ 

    root: Ember.Route.extend({ 
     goToPostsIndex: Ember.Route.transitionTo('posts.index'), 
     goToAbout: Ember.Route.transitionTo('about'), 
     goToShowPost: Ember.Route.transitionTo('posts.index.show'), 

     index: Ember.Route.extend({ 
      route: '/', 
      redirectsTo: "posts.index" 
     }), 

     posts: Ember.Route.extend({ 

      route: '/posts', 
      connectOutlets: function (router) { 
        router.get('applicationController').connectOutlet('posts', App.posts); 
       }, 
      index: Ember.Route.extend({ 
       route: '/', 
       connectOutlets: function (router) { 
        router.get('applicationController').connectOutlet('posts', App.posts); 
       }, 
       show: Ember.Route.extend({ 
        route: '/:post_id', 

        connectOutlets: function (router, post) { 
         router.get('postsController').connectOutlet('post', post); 
        }, 
        deserialize: function(router, params) { 

         var id = params.post_id, 
          i = 0; 
         for (i = 0; i < App.posts.length; i += 1) { 
          if (App.posts[i].id === id) { 
           return App.posts[i]; 
          } 
         } 
        }, 
        serialize: function(router, context) { 
         var rtnVal = {}, 
          id = context.get('id'); 
         if (context) { 
          rtnVal = {post_id: id}; 
         } 

         return rtnVal; 
        } 
       }) 
      }), 
     }), 

     about: Ember.Route.extend({ 
      route: '/about', 
      connectOutlets: function (router) { 
       router.get('applicationController').connectOutlet('about'); 
      } 
     }) 
    }) 
}); 

`

回答

1

只有叶路线意思是通航(即posts.index的原因是不通航的是,它有一个孩子的路线)。

http://jsfiddle.net/NbPpM/8/ 我把posts.index.show移动到了posts.show - 这里的方式是一种常见的模式,至少在我的经验中。

+0

+1,与我写的答案完全相同。 – 2012-08-15 23:29:30

+0

我宁愿参考文档(或任何),明确说明这一点,但无法轻松找到。有人知道吗? – dechov 2012-08-15 23:35:18

+5

也许在文档http://docs.emberjs.com/#doc=Ember.Router&src=false中的'将嵌套路由添加到路由器' – 2012-08-15 23:41:00

相关问题