这是情况。我正在编写一个Ember.js示例,其中我在页面上显示粘滞便笺列表。每个音符都有一个永久链接,当单击时,将列表缩小到6列而不是12列,然后在空白区域中显示音符。当我点击链接时,它工作正常,但当我使用后退按钮返回列表时,它不起作用。这是我的代码:
App.Router.map(function(){
this.resource("notes", function(){
this.resource("note", { path: "/:note_id" });
});
});
App.NotesRoute = Ember.Route.extend({
model: function(){
return App.Note.find();
},
setupController: function(controller){
controller.set("isShowing", false);
}
});
App.NoteRoute = Ember.Route.extend({
setupController: function(){
this.controllerFor("notes").set("isShowing", true);
}
});
每个州的模板:
<script type="text/x-handlebars">
<div class="row">
<div class="twelve columns">
<h1>Ember Stickies</h1>
{{outlet}}
</div>
</div>
</script>
<script type="text/x-handlebars" data-template-name="notes">
<div class="row">
<div class="twelve columns">
<h3>My Notes</h3>
</div>
</div>
<div class="row">
<div {{bindAttr class="isShowing:six:twelve :columns"}}>
<ul class="block-grid four-up mobile-one-up">
{{#each note in controller}}
<li class="sticky-list-item">
{{view Ember.TextArea classNames="sticky-note" valueBinding="note.content"}}
{{#linkTo note note classNames="sticky-permalink"}}
∞
{{/linkTo}}
</li>
{{/each}}
</ul>
</div>
{{outlet}}
</div>
</script>
当Ember调用NoteRoute
s setupController
时,它会将isShowing
设置为true
。但是,当我使用后退按钮返回NotesRoute
时,未调用setupController
,因此isShowing
永远不会更改为false。我认为这是故意的Ember行为,所以我可以使用回调来挂钩这个过渡吗?
答案 0 :(得分:2)
自Ember 1.0.0-rc.1起,deactivate
已被添加为exit
的公共挂钩。您不再需要致电_super
,也不应再使用exit
。
App.NoteRoute = Ember.Route.extend({
setupController: function(){
this.controllerFor("notes").set("isShowing", true);
},
deactivate: function(){
this.controllerFor("notes").set("isShowing", false);
}
});
http://emberjs.com/api/classes/Ember.Route.html#method_deactivate
答案 1 :(得分:0)
我通过搜索Github问题找到了答案。路由具有exit
回调,在转换时触发。我的路由处理程序现在看起来像({n。在this._super()
- 非常重要的结束时对exit
的调用!):
App.NoteRoute = Ember.Route.extend({
setupController: function(){
this.controllerFor("notes").set("isShowing", true);
},
exit: function(){
this.controllerFor("notes").set("isShowing", false);
this._super();
}
});