Ember.js:显式目标的操作失败

时间:2013-04-01 11:33:20

标签: ember.js action target mixins

我想我错过了一些非常基本的内容,但以下内容因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 (我首先使用目标,因为在我的应用程序/登录中是一个单独的路由,并且有一个不同的控制器)。

非常感谢解决方案和解决方法!

1 个答案:

答案 0 :(得分:0)

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

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

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

你也过度使用了阻止登录被调用的send方法。