我想我错过了一些非常基本的内容,但以下内容因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()这样的其他函数。
我在我的应用程序中看到对象App.AppController.prototype上存在login()函数,而在JSBin中它存在于mixin链中的一个对象上。
此时我甚至乐意处理视图中的登录操作或路由器(因为它似乎是过去的默认设置),但这些似乎都无法正常工作。
从文档中,操作处理程序应该存在的当前默认位置是控制器,然后是路由,但是如果我删除目标并向路由添加login(),我会收到另一个错误:{{1 (我首先使用目标,因为在我的应用程序/登录中是一个单独的路由,并且有一个不同的控制器)。
非常感谢解决方案和解决方法!
答案 0 :(得分:0)
您的目标是App.AppController类,而不是该类的实际实例。如果您正在使用路由器并且处于应用程序视图中,则默认情况下操作将以appController为目标。
我已经更新了JSbin以在IndexController上调用登录,因为您的示例位于索引路径中:
你也过度使用了阻止登录被调用的send方法。