2017-03-28 1 views
1

Je suis assez nouveau pour braise. J'ai une application Ember existante et j'ai besoin d'implémenter une fonctionnalité. J'ai un objet Ember comme ci-dessousTransition à l'action de l'itinéraire de l'objet Ember

`import Ember from 'ember'` 

CallService = Ember.Object.extend 

... other code here 

_updateConnectedLeadId: (-> 
    console.log "Do i get here??" 

    **pass the route action here** 

).observes('some_other_here') 
`export default CallService` 

Malheureusement, je ne pouvais pas mettre le code entier ici.

Mon parcours ressemble

ApplicationRoute = Ember.Route.extend 
    actions: 
    showLead: -> 
     console.log data 
     console.log "did i get here?" 
     @transitionTo('dashboard') 

`export default ApplicationRoute` 

J'ai essayé d'utiliser @send('showLead'), @sendAction('showLead') dans ma méthode, mais pas de chance.

Mon intention principale est de faire une transition une fois que le console.log "Do i get here??" est affiché. Je ne suis pas sûr si je suis sur la bonne voie ici.

J'ai également essayé d'utiliser @transitionTo('dashboard') et @transitionToRote('dashboard') directement mais il me jette des erreurs.

J'ai été coincé pendant un jour là-dessus maintenant et je suis désemparé.

Je serai reconnaissant pour toute orientation et aide. Merci

+0

peut-être vous pouvez télécharger votre code ici, https://ember-twiddle.com/ – winter

+0

@amaia, je ne pense vraiment pas que ce sera nécessaire. J'ai fourni le code important qui est pertinent. J'attendrai toute réponse pour en demander plus. Merci pour le lien si. – Aakanksha

Répondre

1

Vous avez le problème que vous essayez de déclencher une action d'itinéraire ou déclencher une transition à partir d'un Ember.Object, appelé service d'appel. Le code que vous créez n'est pas clair sur l'emplacement de création de votre objet personnalisé. où l'observateur est déclenché en raison d'une modification apportée à la mise à jour des propriétés de l'objet, et ainsi de suite.

Néanmoins, j'ai essayé de fournir un example de travail pour vous. Si vous ouvrez la twiddle, vous verrez que j'ai créé une instance my-object au sein de la route index.js et que vous l'avez passée en model à my-component. Lorsque vous cliquez sur le bouton dans my-component.hbs. Les instances my-objectdummyVariable sont basculées et l'observateur au sein de my-object s'exécute. La partie difficile ici est que j'ai passé index route lui-même comme ownerRoute propriété à my-object instance; de sorte que je peux déclencher la voie de dummyAction de index au sein de my-object.js avec

ownerRoute.send('dummyAction'); 

de sorte que l'action connexe à l'exécution et la transition my-route est effectuée. Bien que, je crois que cela pourrait résoudre votre question; Je ne suis pas très content de la conception. Je ne pense pas, c'est un bon moyen pour Ember.Objects de connaître les routes, les actions, les contrôleurs, etc. Je crois que la bonne façon est d'observer les propriétés pertinentes de l'objet à l'intérieur de ces constructions et d'effectuer les actions nécessaires. De plus, vous pouvez envisager de créer un objet service au lieu d'un objet et d'injecter le service directement sur votre itinéraire au lieu de créer une instance de votre classe qui s'étend sur Ember.Object. Si vous devez étendre de Ember.Object vous pouvez simplement injecter route, contrôleur, etc pertinentes aux instances de cette classe d'objet en particulier en utilisant un instance-initializer si vous avez besoin.

De toute façon, s'il vous plaît jeter un oeil à la twiddle et demander plus si vous avez besoin. Je serai heureux d'aider si je peux.

+0

Merci d'avoir pris le temps de créer une démo de travail.Je ne suis pas très au courant des normes mais je pense que je suis d'accord avec vous sur "Je ne pense pas, c'est un bon moyen pour Ember.Objects de connaître les routes, les actions, les contrôleurs, etc." Pourriez-vous expliquer votre point? "Je crois que la bonne façon est d'observer les propriétés pertinentes de l'objet à l'intérieur de ces constructions et d'effectuer les actions nécessaires par elles-mêmes, vous pourriez envisager de créer un service plutôt qu'un objet et d'injecter directement le service. route au lieu de créer une instance de votre classe en prolongeant Ember.Object " – Aakanksha

+0

@Aakanksha je vais l'expliquer plus quand j'ai plus de temps pour sûr. – alptugd

+0

Je l'apprécie. Merci – Aakanksha