gpt4 book ai didi

Ember.js:使用嵌套路由时,后退按钮不会刷新索引 View

转载 作者:行者123 更新时间:2023-12-03 06:22:16 25 4
gpt4 key购买 nike

http://jsfiddle.net/bugsinamber/xjvYk/6/

设置

我有一个包含故事列表的索引 View 。这被渲染到应用程序导出中。当我单击每个故事时,故事 View 会渲染到同一个 socket 中(替换索引 View )。我正在使用嵌套路由。

问题

当我单击“所有故事”从故事 View 返回索引 View 时,它工作正常。但是,如果点击浏览器后退按钮返回索引 View ,路径会正确更改为“/stories”,但索引 View 不会呈现。我必须再按一次后退按钮才能渲染索引 View 。

模板

<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');
}
});

到目前为止我所知道的

如果我不使用嵌套路由,这可以正常工作。显然,如果我不嵌套 View ,我不应该使用嵌套路由,但这限制了设计需求。从逻辑上讲,在这种情况下我应该被允许使用嵌套路由。

我正在嵌套路线,因为我需要从故事 Controller 访问“故事”,如下所示。如果我不嵌套路线,那么当我首先加载故事 View (尚未加载索引 View )时,“posts”不会返回任何内容。

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));
}

}
});

提前致谢。

最佳答案

您的路线应根据您的 UI 进行嵌套。 storiesstory 模板不嵌套,所以只需执行以下操作:

App.Router.map(function() {
this.resource("stories");
this.resource("story", { path: ':story_id' });
});

如果您希望 story URL 包含 stories,您可以这样做:

  this.resource("story", { path: 'stories/:story_id' }); 

接下来,您想要访问App.StoryController中的所有故事。这并不意味着它需要嵌套在 stories 资源中,或者您需要使用 App.StoriesController

您想要访问数据,因此获取数据并将其设置在App.StoryController中:

App.StoryRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.setProperties({
model: model,
stories: App.Story.find()
});
},
model: function(params) {
return App.Story.find(params.story_id);
}
});

并保持 App.StoriesRoute 路由相同,作为单独的路由,与 App.StoryRoute 无关。

App.StoriesRoute = Ember.Route.extend({
model: function() {
return App.Story.find();
}
});

关于Ember.js:使用嵌套路由时,后退按钮不会刷新索引 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16304704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com