Javascript Ember.js中'this'的基本用法
我相当精通Javascript,但我很难理解Ember在某些场景中是如何处理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: {
这个上下文的
我有一个组件控制器:
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传递到组件。只是一个奇怪的路线怪癖。要清楚,我有很多路线/控制器中没有的动作。除了保存到服务器的东西之外,我将所有操作都放在组件中,但这只是个人偏好。