2015-10-29 8 views
9

Sto cercando di strumento this.send() a Ember, agganciando in ActionHandler#send come segue:Ember: aggancio in actionHandler # inviare

Ember.ActionHandler.reopen({ 
    send() { console.log("hooked"); this._super(...arguments); } 
} 

Quando chiamo questo da app.js, come l'applicazione è in fase di avvio, funziona. Quando lo chiamo da un inizializzatore, non lo fa. Quando lo chiamo dopo l'avvio dell'app, ad esempio dal controller dell'applicazione, non funziona neanche. In entrambi i casi in cui non funziona, se rintraccio in una chiamata this.send(), passa direttamente all'implementazione originale di send.

Ho il sospetto che questo abbia qualcosa a che fare con il modo in cui i mixin sono usati quando si istanziano gli oggetti, ma per il resto sono perplesso.

+0

Quindi, cosa vuoi? Vuoi che funzioni quando si collega l'inizializzatore? –

risposta

3

Esso funziona utilizzando inizializzatore:

inizializzatori/azione hook.js

import Ember from 'ember'; 

export function initialize() { 
    Ember.ActionHandler.reopen({ 
    send() { 
     console.log("hooked"); 
     this._super(...arguments); 
    } 
    }); 
} 

export default { 
    name: 'action-hook', 
    initialize: initialize 
}; 

testato nel regolatore applicazione.

controller/application.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    afterInit: Ember.on('init', function() { 
    Ember.run.next(() => { 
     console.log('Send action.'); 
     this.send('exampleAction'); 
    }); 
    }), 
    actions: { 
    exampleAction() { 
     console.log('exampleAction handled'); 
    } 
    } 
}); 

Produce:

Invia azione.

agganciato

exampleAction manipolati

Working demo e full code behind it.