2017-05-09 3 views
0

Ich stoße in Schwierigkeiten, wenn ich von einer Route weg und dann wieder zurück gehe, was nicht zu vollständigen Übergängen in Ember führt.Ist es möglich, einen vollständigen, realen Übergang zu einer anderen Route durchzuführen und in Ember zurück zu gehen?

Um konkreter zu sein, ich habe eine Route game.new, die ein neues Spiel auf Griff Einstellung und geht dann dies zu game.play. Der Benutzer muss nichts tun, und so findet der Übergang automatisch im afterModel Hook statt. Sobald jedoch ein Spiel vorbei ist, möchte ich ein neues Spiel starten, indem ich zurück zu game.new gehe und dann automatisch wieder auf game.play zurückwechsle. Wenn ich jedoch die folgenden Haken in app/routes/game/new.js habe:

afterModel() { 
    this.transitionTo('game.play', game); 
} 

Dies hat den Effekt, nicht vollständig den Übergang abgeschlossen und damit die game/play Strecke nicht vollständig abgerissen und wieder aufgebaut.

Gibt es eine Möglichkeit voll von game.play zu game.new den Übergang und dann Übergang automatisch zurück zu game.play so dass die gesamten Inhalt in game.play wird abgerissen und neu erstellt?

+0

Wenn Sie ein Objekt an die Methode transtionTo übergeben, wird der Modell-Hook nicht aufgerufen. da wird angenommen, dass das gegebene Objekt das Modell für die Route ist. Wenn Sie 'this.transitionTo ('game.play')' es wird alle Modell hooks – kumkanillam

+0

@ kumkanillam aufrufen, stört es mich nicht, dass mein Modell Hook nicht aufgerufen wird. Das Problem ist, dass das Zeug in der Steckdose nicht abgerissen und neu gezeichnet wird. Das neue Spielmodell bewirkt, dass alle Bindungen aktualisiert werden, aber ich würde es vorziehen, alle Sachen in der Steckdose wieder einzufügen, so dass die Komponenten 'init' und' didInsertElement'-Haken wieder aufgerufen werden. –

Antwort

0

Von Rock and Roll mit Ebberjs:

Controller in Ember sind Singletons und somit nicht abgerissen werden, wenn ihre Route von weg navigiert wird, oder wenn ihre Modelländerungen. Das bedeutet, dass ihre Eigenschaften bestehen bleiben, solange die App lebt und alles, was zurückgesetzt werden muss, muss manuell durchgeführt werden. (...) Jede Route hat einen resetController Haken, die aufgerufen wird, wenn die Route wird beendet, oder wenn das Modell für die Route

verändert habe ich versucht, das Spiel mit diesem twiddle zu imitieren:

resetController: function(controller,isExiting) { 
    if(isExiting) { 
    this.score=0; 
    } 
} 
+0

Ich weiß, dass ich den Controller zurücksetzen kann. Aber ich möchte auch das Zeug in der Schablone (Steckdose) abreißen und es wieder einfügen lassen. Ich habe eine Hauptkomponente, die neu gezeichnet werden sollte. Mir ist klar, dass ich die ganze Sache in einen '{{#unless resetting}} 'Block schreiben und zuerst' resetting' auf true und dann auf false setzen könnte und das hätte diesen Effekt. Das schien nur hacky. –

Verwandte Themen