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,与我写的答案完全相同。 – 2012-08-15 23:29:30
我宁愿参考文档(或任何),明确说明这一点,但无法轻松找到。有人知道吗? – dechov 2012-08-15 23:35:18
也许在文档http://docs.emberjs.com/#doc=Ember.Router&src=false中的'将嵌套路由添加到路由器' – 2012-08-15 23:41:00