我想在用户离开页面之前保存用户进度。在Ember.js(v 1.0.0-pre.4)中执行此操作的最佳方法是什么?
在纯JQuery中,它看起来像:
$(window).unload(function() {
ajaxSaveUserProgress();
return true;
});
在恩伯我试图做这样的事情:
Exam.TestView = Ember.View.extend({
unload: function(event){
controller.ajaxSaveUserProgress(); // call controller method
console.log('UNLOADED'+get(this, 'controller.test'));
}
});
答案 0 :(得分:3)
我个人将此代码放在ApplicationRoute
中,因为我相信ApplicationRoute
的{{1}}仅在首次初始化应用程序时执行一次。你必须仔细检查这一点,但这是我对它的理解。
我已经注释掉了你想要的代码,因为我还演示了如何将AJAX请求设置为同步,否则窗口将关闭,你的AJAX请求将无法完成。我们自然需要在窗口关闭之前等待它完成。
setupController
请忽略我的App.ApplicationRoute = Ember.Route.extend({
setupController: function() {
// var controller = this.controllerFor('foo');
// controller.ajaxSaveUserProgress();
jQuery(window).on('unload', function() {
jQuery.ajax({ type: 'post', async: false, url: 'foo/bar.json' });
});
}
});
而不是jQuery
(个人偏好!)
答案 1 :(得分:0)
App.FormRoute = Ember.Route.extend({
actions: {
willTransition: function(transition) {
if (this.controller.get('userHasEnteredData') &&
!confirm("Are you sure you want to abandon progress?")) {
transition.abort();
} else {
// Bubble the `willTransition` action so that
// parent routes can decide whether or not to abort.
return true;
}
}
}
});