0

本当に基本的なものが欠けていると思いますが、以下はThe action 'login' did not exist on App.AppController.

テンプレート:

<h2>Click the button and watch the console</h2>
<button type="button" {{action login target="App.AppController"}}>Log in</button>

コントローラ:

App.AppController = Ember.Controller.extend({
  login: function() {
    // never gets here
    debugger;
  },
  send: function() {
    // or even here
    debugger;
  }
});

JSBin: http://jsbin.com/okuqiv/5/edit (これは最新の Ember を指していますが、1.0-rc2 と同じ動作です。これは私が数日間使用しているバージョンです。以前のバージョンで試しました)。

デバッグ時に、どういうわけかコントローラ mixin が公開すべきすべての関数を公開していないようです -- login() は私が追加した関数ですが、send() は Ember 関数です。また、get() などの他の関数も欠落しています。

私のアプリでは login() 関数がオブジェクト App.AppController.prototype に存在し、JSBin では mixin チェーン内のオブジェクトの 1 つに存在することがわかりました。

この時点で、ビューまたはルーター (過去にはデフォルトだったようです) でログイン アクションを処理したいと思いますが、それらのどれも機能していないようです。

ドキュメントによると、アクションハンドラーが存在する現在のデフォルトの場所はコントローラーであり、次にルートですが、ターゲットを削除して login() をルートに追加すると、別のエラーが発生します: Nothing handled the event 'login'(私は私のアプリでは /login は別のルートであり、別のコントローラーを持っているためです)。

解決策と回避策は非常に高く評価されます!

4

1 に答える 1

0

クラス App.AppController を対象としており、そのクラスの実際のインスタンスではありません。ルーターを使用していてアプリ ビューにいる場合、アクションはデフォルトで appController をターゲットにします。

あなたの例はインデックスルートにあるので、IndexControllerでログインを呼び出すようにJSbinを更新しました。

http://jsbin.com/okuqiv/10/

また、ログインの呼び出しを妨げていた send メソッドに乗り過ぎていました。

于 2013-04-01T19:12:13.253 に答える