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 链中的一个对象上。

在这一点上,我什至很乐意处理视图或路由器中的登录操作(因为它似乎是过去的默认设置),但这些似乎都不起作用。

从文档中,动作处理程序应该存在的当前默认位置无论如何都是控制器,然后是路由,但是如果我删除目标并将 login() 添加到路由,我会收到另一个错误:(Nothing handled the event 'login'我正在使用首先是目标,因为在我的应用程序中 /login 是一个单独的路由并且具有不同的控制器)。

解决方案和解决方法将不胜感激!

4

1 回答 1

0

您的目标是 App.AppController 类,而不是该类的实际实例。如果您正在使用路由器并且在应用程序视图中,则默认情况下操作将针对 appController。

由于您的示例位于索引路由中,因此我已更新 JSbin 以在 IndexController 上调用登录:

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

您还过度使用了阻止调用登录的发送方法。

于 2013-04-01T19:12:13.253 回答