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
Javascript Ember.js中'this'的基本用法_Javascript_Ember.js - Fatal编程技术网

Javascript Ember.js中'this'的基本用法

Javascript Ember.js中'this'的基本用法,javascript,ember.js,Javascript,Ember.js,我相当精通Javascript,但我很难理解Ember在某些场景中是如何处理这个上下文的 我有一个组件控制器: import Component from '@ember/component'; export default Component.extend({ keyPress(e) { // here I want to call a method in the `actions` hash this.get('onAccept') }, actions: {

我相当精通Javascript,但我很难理解Ember在某些场景中是如何处理
这个
上下文的

我有一个组件控制器:

import Component from '@ember/component';

export default Component.extend({
  keyPress(e) {
    // here I want to call a method in the `actions` hash
    this.get('onAccept')
  },

  actions: {
    onAccept() {
      console.log('action accepted!')
    }
  }
}
但每次运行此操作时,都会出现以下错误:

Uncaught TypeError: this.get(...) is not a function
当我在
操作
散列之外有一个方法需要访问
操作
散列中的函数时,这种情况似乎总是发生,或者反过来

这种行为似乎是必要的,因为组件事件属于

那么,我应该如何在
操作
散列之外拥有事件方法,但仍然能够调用属于
操作
散列内部的方法呢?


这似乎是灰烬中控制器的一个缺乏文档记录的部分。也许我只是错过了一些东西。非常感谢您的帮助。

要从
操作
散列之外调用操作,请使用
此。发送

this.send('onAccept');

有关
send
sendAction
的更多信息,请参见此处:

this.send('someActionName')将允许您从另一方调用操作function@handlebears假设hash的
actions
中的所有方法基本上都应该被视为
route.js
文件的一部分,我的假设正确吗?由于从控制器方法到路由方法时必须使用
this.send()
?如果您有这样做的机会,您可能有兴趣尝试使用ember装饰器的ember本机ES类。无需使用发送或获取。:)@qarthandso请注意发送和发送操作是不同的。在同一个文件中工作时,Send很有用,sendAction用于向上传递操作(现在有更好的方法)。我在控制器中放置操作并将它们传递给组件,或者直接在需要它们的组件中声明它们。您不能直接将操作从route.js传递到组件。只是一个奇怪的路线怪癖。要清楚,我有很多路线/控制器中没有的动作。除了保存到服务器的东西之外,我将所有操作都放在组件中,但这只是个人偏好。