2015-08-10 10 views
5

I eine übergeordnete Komponente, deren Vorlage Zugriff hat eine Dropzone Komponente aus https://www.npmjs.com/ember-cli-dropzonejs enthält:„this“ als das Elternteil von Rückrufen emberjs verschachtelt Komponente

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

In der übergeordneten Steuereinheit, habe ich ein Verfahren fileReceived, die aufgerufen wird, Wird aufgerufen, wenn das Erfolgsereignis in der Dropzone ausgelöst wird. Ich möchte jedoch andere Methoden aufrufen, die auf der Steuerung gespeichert sind, wenn die Methode fileReceived aufgerufen wird, aber ich kann nicht auf this zugreifen. Ich habe versucht, eine Instanzvariable namens self zu this auf didInsertElement, aber es gibt mir Fenster statt meiner Komponente.

Dies ist meine Mutter Component-Controller:

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

Antwort

2

Ich denke fileReceived innerhalb von Aktionen sein sollte, und dann sollte this.sendActionthis.send sein. Dann denke ich, dass das das ist, was du willst?

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

bearbeiten:

Wie in den Kommentaren diskutiert Sie auch Ihre Vorlage benötigt ändern

{{drop-zone url='#' addRemoveLinks=true success=(action 'fileReceived')}} 
+0

Ich versuche tat, und dachte, dass es nicht funktioniert hat. Ich habe es gerade noch einmal ausprobiert und festgestellt, dass ich meine Vorlage wie folgt aussehen lassen muss: '{{drop-zone url = '#' addRemoveLinks = true Erfolg = (Aktion 'fileReceived')}}'. Jetzt nimmt es die Handlung auf und scheint zu arbeiten. – Asagohan

+0

War im Begriff, '' {{drop-zone url = '#' addRemoveLinks = true success = "fileReceived"}} 'vorzuschlagen, aber deine Syntax oben ist besser für neuere Ember – Knightsy

Verwandte Themen