Ember vorbei, ein Modell zu transitionToRoute
Bin ich mit Ember-cli mit ember 1.11
Ich versuche, die transitionToRoute Methode in einem controller, um den übergang zu einer route und füttern ein dynamisch erzeugtes Objekt als Modell.
Hier mein controller:
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
launch_scanner: function(){
console.log('launch_scanner');
var model = {name: "Edward", phone: "123", email: "[email protected]"};
//the final app will pull the model variable from a QR scanner
this.transitionToRoute('addcontact', model);
}
}
});
Wenn ich den Auslöser dieser Aktion, die transitionToRoute Methode diesen Fehler verursacht:
Nicht abgefangener Fehler: Mehr Kontext-Objekte übergeben wurden, als es gibt
dynamischen Segmenten für die route: addcontact
Wenn ich lassen Sie sich die Modell-parameter, der es übergänge zu den addcontact route ganz gut. Was mache ich falsch?
Hier ist mein router file:
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.route('home', {path: '/'});
this.resource('addcontact', {path: '/addcontact'});
});
export default Router;
- Zeigen Sie Ihre router-Datei, bitte, um zu sehen, welche Parameter Sie brauchen, um passieren
- Ich habe aktualisiert und zeigt die router-Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habt Ihr es mit einem klassischen problem, das in vielen Ember-Anwendungen, die, wie zu handhaben "neue"/"erstellen" - Situationen.
Können Sie eine route definieren, wie
weil die den neuen Kontakt, der nicht über eine id, und nicht bis es auf dem server persistent gespeichert, an welcher Stelle es wird nicht neues mehr.
Dennoch gibt es einige Punkt in Ihrer Anwendung, in Ihrem Fall nehme ich an, auf der "home" - Seite, wo der Benutzer drückt einen "Neuen Kontakt", und es kann auch nützliche Informationen über das, was zu schaffen, oder wie Sie erstellt werden und es können sogar erstellen Sie das Objekt direkt dort mit
this.store.createRecord
- doch wie funktioniert ein pass, Informationen, oder die neue Platte, dieaddcontacdt
route, die keine dynamischen segment?Einige Ideen sind:
Erstellen Sie den neuen Kontakt in Ihrer
home
route oder was auch immer, und speichern Sie es in den controller. Dann, in dermodel
Haken der neuen route, rufen Sie es mitthis.controllerFor('home').get('newContact')
.Übergeben die notwendigen Parameter für die Erstellung des neuen Objekts, falls vorhanden, die
addcontact
route als query Parameter, mittransitionTo('newcontact', queryParameters)
. Dann, in dermodel
Haken, erstellen Sie das neue Objekt mitthis.store.createRecord('contact', transition.queryParameters)
oder etwas vergleichbares.Dass das normal ist, weil Sie nicht alle dynamischen segment in Ihrem addContact route. Sollten Sie Ihren router zu
Konnte man nun übergeben Sie die Modell-Id, anstatt das ganze Modell zum auslösen der
model
Haken. Alternativ können Sie übergeben das ganze Modell, aber es wird nicht ausgelöst, diemodel
Haken. Obwohl Sie immer noch verändern können Ihr Modell in derafterModel
Haken.Wenn Sie möchten, navigieren Sie zu einem Subroute für einen ungespeicherten Datensatz haben Sie 2 Möglichkeiten
Entweder speichern Sie Ihr Modell vor dem übergang, um die Strecke
oder erstellen Sie eine id für das Modell in createRecord wenn Sie nicht möchten, speichern Sie das Modell (vielleicht der Benutzer kann Abbrechen und Sie nicht behandeln möchten, löschen)
Eine grundlegende Funktion für die id erstellen mit niedrigen Potenzial identische ids wäre:
Mit diesem Ansatz eine noch nicht gespeicherte Modell hat eine id, um den übergang zu, man denke nur an die Handhabung der übergänge aus, die route, da die aktuelle id ist nicht mehr gültig nach dem speichern des Modells (Modell wird real-id von der server-Antwort).