我尝试将willTransition操作与自定义模式结合使用。我的代码如下:
模态
<div class="modal fade" id="confirmModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Confirm</h4>
</div>
<div class="modal-body">
Please save your changes before you leave page.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="stay" data-dismiss="modal">Stay</button>
<button type="submit" class="btn btn-primary" id="leave" data-dismiss="modal">Leave</button>
</div>
</div>
</div>
</div>
路线
actions: {
willTransition(transition) {
var self = this;
if (self.controller.get('changesNotSaved')) {
transition.abort();
Ember.$('#confirmModal').modal();
Ember.$('#leave').on('click', function(){
Ember.self.transitionTo(transition.handlerInfos[1].name);
});
}
else {
return true;
}
},
}
我的问题是,当用户选择&#34;离开&#34;时,我无法重定向用户。莫代尔的按钮。我收到了错误
无法读取属性&#39; transitionTo&#39;未定义的
我在文档页面中读到,从willTransition中调用transitionTo是可行的http://emberjs.com/api/classes/Ember.Route.html#event_willTransition。
我真的不知道如何解决这个问题......提前致谢!
答案 0 :(得分:3)
我不知道你在哪里看到了Ember.self
的使用情况,但这是我第一次看到它,显然错误是因为Ember.self
是undefined
。
由于您在开始时保存了函数的上下文(就是它,this
变量的值),如果您只更改Ember.self
的{{1}},它应该可以正常工作
另一种更现代的方法是使用箭头函数,因为箭头函数保留了调用者上下文:
self
使用此技术,您可以在开头删除Ember.$('#leave').on('click', () => {
this.transitionTo(transition.handlerInfos[1].name);
});
行。
您可以详细了解箭头功能及其上下文保存here。
我建议你做一些关于Javascript如何工作的讲座,因为这个模式是你将在Javascript中不断处理的。
答案 1 :(得分:-1)
不应该this
而不是Ember.self
?
Ember.$('#leave').on('click', function(){
this.transitionTo(transition.handlerInfos[1].name);
});
我从未见过Ember.self
,我猜这就是为什么它未定义...