Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js:具有显式目标的操作失败_Ember.js_Action_Target_Mixins - Fatal编程技术网

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

Ember.js:具有显式目标的操作失败,ember.js,action,target,mixins,Ember.js,Action,Target,Mixins,我想我遗漏了一些非常基本的东西,但以下操作失败,因为App.AppController上不存在“login”操作 模板: <h2>Click the button and watch the console</h2> <button type="button" {{action login target="App.AppController"}}>Log in</button> JSBin:(这是指向Ember的最新版本,但它与1.0-rc2的行

我想我遗漏了一些非常基本的东西,但以下操作失败,因为App.AppController上不存在“login”操作

模板:

<h2>Click the button and watch the console</h2>
<button type="button" {{action login target="App.AppController"}}>Log in</button>
JSBin:(这是指向Ember的最新版本,但它与1.0-rc2的行为相同,我已经使用了几天的版本;我还没有在以前的版本上尝试过它)

调试时,控制器mixin似乎没有公开它应该公开的所有函数——login()是我添加的函数,而send()是一个Ember函数。它还缺少其他函数,如get()

我看到在我的应用程序中,login()函数存在于对象app.AppController.prototype上,而在JSBin中,它存在于mixin链中的一个对象上

在这一点上,我甚至乐意处理视图中的登录操作,或者路由器(在过去似乎是默认的),但这些似乎都不起作用

从文档中可以看出,操作处理程序的当前默认位置应该是控制器,然后是路由,但是如果我删除目标并将login()添加到路由中,则会出现另一个错误:
没有处理事件“login”
(我首先使用的是目标,因为在我的应用程序中/登录是一个单独的路由,并且具有不同的控制器)


非常感谢您提供解决方案和解决方案!

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

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


您还过度使用了send方法,该方法阻止调用login。

我不久前在IRC中得到了答案。您说得对了一半,我的目标是定义/单例,而不是实例,但问题是如何定位不同的控制器(为了示例,jsbin被简化),该问题的答案是使用{{action login target=“controllers.app”}。最终的解决方案还要求操作上下文中的控制器具有需求:['app'],以便该操作可以由AppController处理。
App.AppController = Ember.Controller.extend({
  login: function() {
    // never gets here
    debugger;
  },
  send: function() {
    // or even here
    debugger;
  }
});