http://jsfiddle.net/bugsinamber/xjvYk/6/
设置
我有一个包含故事列表的索引视图。这被渲染到应用程序出口中。当我单击每个故事时,故事视图会呈现到同一个插座中(替换索引视图)。我正在使用嵌套路由。
问题
当我单击“所有故事”以从故事视图返回索引视图时,它工作正常。但是,如果点击浏览器后退按钮返回索引视图,路径会正确更改为“/stories”,但索引视图不会呈现。我必须再按一次后退按钮才能呈现索引视图。
模板
<script type="text/x-handlebars" data-template-name="application">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="stories">
<p>Stories Index Page</p>
{{#each story in controller}}
{{#linkTo "story"}}
{{story.title}}
{{/linkTo}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="story">
{{#linkTo "index"}}Back to all stories{{/linkTo}}
{{title}}
<p>Story test page</p>
</script>
app.js
App = Ember.Application.create({});
App.Router.map(function() {
this.resource("stories", function() {
this.resource("story", {path: ':story_id'});
});
});
App.StoriesRoute = Ember.Route.extend({
model: function() {
return App.Story.find();
}
});
App.StoryRoute = Ember.Route.extend({
model: function(params) {
return App.Story.find(params.story_id);
},
renderTemplate: function() {
this.render('story', { // the template to render
into: 'application' // the template to render into
});
}
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('stories');
}
});
到目前为止我所知道的
如果我不使用嵌套路由,这可以正常工作。显然,如果我不嵌套我的视图,我不应该使用嵌套路由,但这会限制设计需求。从逻辑上讲,在这种情况下,我应该被允许使用嵌套路由。
我正在嵌套路由,因为我需要从故事控制器访问“故事”,如下所示。如果我不嵌套路由,那么当我首先加载故事视图(尚未加载索引视图)时,“帖子”不会返回任何内容。
App.StoryController = Ember.ObjectController.extend({
needs: "stories",
previousPost: function() {
return this.advancePost(1);
},
nextPost: function() {
return this.advancePost(-1);
},
advancePost: function(delta) {
var index, length, posts;
posts = this.get('controllers.stories');
length = posts.get('length');
index = (posts.indexOf(this.get('content')) + delta + length) % length;
if (index >= 0 && index < length) {
return this.transitionToRoute('story', posts.objectAt(index));
}
}
});
提前致谢。