1

ユーザーがページを離れる前に、ユーザーの進行状況を保存したい。Ember.js (v 1.0.0-pre.4) でこれを行う最善の方法は何ですか?

純粋な JQuery では、次のようになります。

  $(window).unload(function() { 
    ajaxSaveUserProgress();
    return true;
  });

Emberでは、次のようなことをしようとしています:

  Exam.TestView = Ember.View.extend({

    unload: function(event){
      controller.ajaxSaveUserProgress(); // call controller method
      console.log('UNLOADED'+get(this, 'controller.test'));
    }
 });
4

2 に答える 2

3

個人的には、ApplicationRouteアプリケーションが最初に初期化されたときに . これを再確認する必要がありますが、それは私の理解です。ApplicationRoutesetupController

AJAX リクエストを同期に設定する必要があることも示したので、必要なコードをコメントアウトしました。そうしないと、ウィンドウが閉じて AJAX リクエストが完了しません。当然、ウィンドウが閉じられる前に、それが終了するのを待つ必要があります。

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代わりに無視してください$(個人的な好みです!)

于 2013-02-11T01:43:49.573 に答える
0

Ember には、これを処理する標準的な方法があります。 ドキュメントから:

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;
      }
    }
  }
});
于 2015-04-30T03:18:44.120 に答える