2

このログイン例は、自分のニーズに合わせてコピーしました。それはうまくいきます。しかし、私は自分自身に問いかけています: なぜこのEmber.run.later(this, this._serverLogin, 100);行が必要なのですか? コメントが言ったように、それは遅延をシミュレートするためだけのものです。Ok。しかし、これを次のように変更すると:

// Create the login controller
  MyApp.loginController = Ember.Object.create({
    username: '',
    password: '',
    isError: false,

    tryLogin: function() {
      if(this.get('username') === MyApp.USERNAME &&
         this.get('password') === MyApp.PASSWORD) {
        this.set('isError', false);
        this.set('username', '');
        this.set('password', '');
        MyApp.stateManager.send('loginSuccess');
      } else {
        this.set('isError', true);
        MyApp.stateManager.send('loginFail');
      }
    },
  });   

なしEmber.run.later(this, this._serverLogin, 100);で、私は得るUncaught Error: <Ember.StateManager:ember270> could not respond to event loginSuccess in state loggedOut.awaitingCredentials.ので、stateManager を変更する前に、またはそのようなものを取得するには、おそらくこの遅延が必要だと思いました。しかし、古いコードを実行するとEmber.run.later(this, this._serverLogin, 0);、まだ機能します。それで、何が違うのですか?emberのドキュメントにはヒントがありませんでした。

4

1 に答える 1

2

これは、 (/ )StateManagerを呼び出すときにまだ初期状態のセットアッププロセスにあるためです。sendEventloginSuccessloginFailed

イベントの送信をw/で遅らせることによりEmber.run.later、コードは次の実行ループで処理され、状態が適切に設定されます。


そうは言っても、あなたは非常に古い方法でEmberを使用しています。アプリのルートを管理するための最先端の方法を確認する必要があります。

于 2012-10-30T17:01:39.380 に答える