从回调 emberjs 嵌套组件访问 "this" 作为父级
Accessing "this" as the parent from callbacks emberjs nested component
我有一个父组件,其模板包含来自 https://www.npmjs.com/ember-cli-dropzonejs:
的 dropzone 组件
{{drop-zone url='#' addRemoveLinks=true success=fileReceived}}
在父控制器中,我有一个名为 fileReceived
的方法,当成功事件在 dropzone 上触发时调用该方法。但是,我想在调用 fileReceived
方法时调用存储在控制器上的其他方法,但我无法访问 this
。我尝试在 didInsertElement
上将名为 self
的实例变量设置为 this
,但它给了我 window 而不是我的组件。
这是我的父组件控制器:
import Ember from 'ember';
export default Ember.Component.extend({
self:null,
didInsertElement:function()
{
this.set('self', this);
},
fileReceived: function (file) {
//Validate sheet
this.sendAction('doStuff', file); //"this" returns a dropzone object instead of parentObject
//this.doStuff(file);
},
actions: {
doStuff: function (file) {
//do stuff with the file
}
});
我觉得fileReceived
应该在actions里面,然后this.sendAction
应该是this.send
。那我想这就是你想要的东西吧?
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
fileReceived: function (file) {
//Validate sheet
this.send('doStuff', file); //"this" returns a dropzone object instead of parentObject
//this.doStuff(file);
},
doStuff: function (file) {
//do stuff with the file
}
});
编辑:
如评论中所述,您还需要将模板更改为
{{drop-zone url='#' addRemoveLinks=true success=(action 'fileReceived')}}
我有一个父组件,其模板包含来自 https://www.npmjs.com/ember-cli-dropzonejs:
的 dropzone 组件{{drop-zone url='#' addRemoveLinks=true success=fileReceived}}
在父控制器中,我有一个名为 fileReceived
的方法,当成功事件在 dropzone 上触发时调用该方法。但是,我想在调用 fileReceived
方法时调用存储在控制器上的其他方法,但我无法访问 this
。我尝试在 didInsertElement
上将名为 self
的实例变量设置为 this
,但它给了我 window 而不是我的组件。
这是我的父组件控制器:
import Ember from 'ember';
export default Ember.Component.extend({
self:null,
didInsertElement:function()
{
this.set('self', this);
},
fileReceived: function (file) {
//Validate sheet
this.sendAction('doStuff', file); //"this" returns a dropzone object instead of parentObject
//this.doStuff(file);
},
actions: {
doStuff: function (file) {
//do stuff with the file
}
});
我觉得fileReceived
应该在actions里面,然后this.sendAction
应该是this.send
。那我想这就是你想要的东西吧?
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
fileReceived: function (file) {
//Validate sheet
this.send('doStuff', file); //"this" returns a dropzone object instead of parentObject
//this.doStuff(file);
},
doStuff: function (file) {
//do stuff with the file
}
});
编辑:
如评论中所述,您还需要将模板更改为
{{drop-zone url='#' addRemoveLinks=true success=(action 'fileReceived')}}