访问"这个"作为回调中的父级emberjs嵌套组件

时间:2015-08-10 05:58:47

标签: ember.js dropzone.js

我有一个父组件,其模板包含https://www.npmjs.com/ember-cli-dropzonejs的dropzone组件:

{{drop-zone url='#' addRemoveLinks=true success=fileReceived}}

在父控制器中,我有一个名为fileReceived的方法,当成功事件在dropzone上触发时,该方法被调用。但是,我想在调用fileReceived方法时调用存储在控制器上的其他方法,但我无法访问this。我尝试在self上设置一个名为this的实例变量到didInsertElement,但它给了我窗口而不是我的组件。

这是我的父组件控制器:

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
  }
});

1 个答案:

答案 0 :(得分:2)

我认为fileReceived应该在行动中,然后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')}}