我想我錯過了一些非常基本的東西,但下面的失敗與The action 'login' did not exist on App.AppController
。Ember.js:明確的目標行動失敗
模板:
<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(這是指向灰燼最新的,但它與1.0-RC2,我一直在使用的版本相同的行爲幾天;我還沒有嘗試過以前的版本)。在調試時,控制器mixin似乎並沒有公開所有的函數 - login()是我添加的函數,但send()是一個Ember函數。它也缺少get()等其他函數。
我看到在我的應用程序中,對象App.AppController.prototype上存在login()函數,而在JSBin中,它存在於mixin鏈中的一個對象上。
在這一點上,我甚至很樂意處理視圖中的登錄操作或路由器(因爲它似乎是過去的默認設置),但這些似乎都不起作用。
從文檔中,操作處理程序應該生存的當前默認位置是控制器,然後是路由,但是如果我刪除目標並向路由添加login(),則會出現另一個錯誤:Nothing handled the event 'login'
(我首先使用目標,因爲在我的應用程序/登錄是一個單獨的路線,並有一個不同的控制器)。
解決方案和解決方法將非常感謝!
不久前我在IRC得到了答案。你是對的,我的目標是定義/單例,而不是實例,但問題是如何定位不同的控制器(爲簡單起見,jsbin被簡化了),對這個問題的答案是使用{ {action login target =「controllers.app」}}。 –
仍將標記爲已回答:) –
最終解決方案還要求操作環境中的控制器具有需求:['app'],以便該操作可由AppController處理。 –