我有以下模板设置,显示项目列表,并将每个列表包装在自己的控制器中:
{{#each controller itemController="contact"}}
<div class="contact-entry">
<div class="title" {{action toggle on="click"}}>{{title}}</div>
{{#if showDetails}}
<div class="details">
<div>{{safe details}}</div>
</div>
{{/if}}
</div>
{{/each}}
主控制器是一个名为ContentsController
的ArrayController,每个项目都包含在一个名为ContentController
的ObjectController中。 ContentsController
的内容在路由中明确设置(我简化了数据):
App.ContactsRoute = Em.Route.extend({
model: function() {
return [{'title': 'first'}, {'title': 'second'}];
}
});
这非常有效。但是,如果我导航到另一个路径然后再返回,则ContentController
上的设置不会保留。发生的是模型数据被重新加载,我假设为每个列表项创建了一个ObjectController。顺便说一下,ContentsController
不是这种情况,它会保留其设置。
每次访问页面时,阻止为每个列表项创建新ContentController
的问题有什么解决方案?
答案 0 :(得分:0)
我假设您对ContentController
的引用确实是ContactsController
,因为您在#each块中使用了itemController="contact"
。
您想要保留哪种数据? showDetails
旗帜?当您退出/进入路线时,ContactControllers
将被创建和销毁,而且我知道无论如何都要保留这些路线。
ContactsController
保留其属性,因为它生成了一个单例控制器,因为你有一个ContactsRoute
。