2015-02-20 12 views
7

Sto solo imparando Ember.js e ho avuto un piccolo problema. Ho un servizio dove voglio chiamare un altro metodo che ho definito all'interno dello stesso oggetto, in questo modo:Metodo di chiamata da altro metodo all'interno di Ember Service

export default Ember.Service.extend({ 
    myMethod: function() { ... }, 

    otherMethod: function() { 
    this.myMethod(); // <---- this doesn't work 
    this.get('myMethod')(); // <---- also doesn't work 
    Ember.run.bind(this, this.myMethod)() // <---- no dice 
    } 
}); 

Esiste un modo per fare questo? Mi piacerebbe molto riutilizzare il codice nella mia base di codice.

Grazie.

+0

La tua domanda è davvero a corto di qualsiasi tipo di dettaglio, per esempio come stai inizializzando e chiamando 'myMethod()' sul tuo servizio. Ma non dovresti estendere "Ember.Service' ma' Ember.Object', e dovresti inizializzarlo correttamente: http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/ – Leeft

+0

... questo fa parte di un corso di formazione Ember, quindi sto solo facendo come mi stanno dicendo che dovrei. Non sono sicuro di quali altri tipi di dettagli siano necessari. Non dovrei essere in grado di chiamare il metodo di un oggetto da se stesso? – Jason

+0

Supponendo che tu stia creando una sorta di nuovo oggetto con questa classe e poi chiamando 'serviceObject.otherMethod()' non dovresti avere problemi a fare proprio questo. Non c'è nulla nel codice che hai mostrato che possa vietarlo, quindi deve essere il modo in cui lo crei o lo usi. – Leeft

risposta

2

Immagino che tu sia già passato da questo punto. Ma ecco un gioco d'azzardo nel caso dimostri come un servizio possa fare riferimento ai propri metodi. Come è stato detto nei commenti, è una cosa javascript su this.

https://ember-twiddle.com/7caf29fe1df7f36e6e3e49578fc3aed3?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer.hbs

+0

So che è vecchio, ma come faccio a far funzionare questo twiddle? Fondamentalmente ho aggiunto una chiamata di funzione, 'displayMovies()', all'azione che hai fatto nel tuo twiddle https://ember-twiddle.com/27aebdeb9ab75841ee16b3dbd8df3f76?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer .hbs – mk2

+1

Ciao @MarcusRenno, se leggo correttamente il tuo twiddle vorrai attivare la visualizzazione di film con il servizio film. Vorrei sconsigliare comunque. Il servizio di film è un singleton e potrebbe sopravvivere al componente su cui si prevede di visualizzare le cose, o si potrebbe desiderare di condividerlo tra diversi componenti diversi. Invece, memorizzare i dati con il servizio e consumarlo con i componenti è probabilmente la soluzione migliore. – shane

+1

Questo è un buon suggerimento, ma il problema che ho cercato di porre è stato diverso. La funzione displayMovies è stata appena creata per provare a utilizzare una funzione all'interno di un'altra funzione nel caso in cui una funzione inizi a diventare grande. Mi piace mantenere separate le funzionalità, quindi è più facile da leggere/mantenere – mk2

Problemi correlati