2016-05-20 7 views
1

Ich möchte mein Routenmodell nach dem Speichern/Aktualisieren der Datei route.js erneut laden. Das Folgende ist mein Routenmodell.Ember - So laden Sie das Routenmodell nach dem Speichern/Aktualisieren von Datensätzen

export default Ember.Route.extend({ 

model() { 
    return Ember.RSVP.hash({ 
     employeeList : this.store.findAll('employee'), 
     employee : this.store.createRecord("employee"), 
     }); 
} 

Ich versuchte folgendes und es hat nicht funktioniert.

this.refresh(); // I saw this in many posts. 

Kann jemand vorschlagen, wie man nach dem Speichern/Aktualisieren ein Modell neu lädt?

+0

Aus welchem ​​Grund möchten Sie nachladen? Vielleicht kann das Problem anders gelöst werden? Btw, "this.refresh()" funktioniert in Route. –

+0

Ich bearbeite ein Raster in Vorlage mit EmployeeList. Aber nachdem ein neuer Datensatz gespeichert wurde, wird er nicht im Raster angezeigt. Also überlegt man das Modell neu zu laden, damit es alle Mitarbeiterdetails wieder holt und alle in Templates anzeigt. –

+0

Es ist seltsam, dass der neue Mitarbeiter nicht in Ihrem Raster angezeigt wird ... Normalerweise habe ich eine Unterroute, die neue Objekte erstellt, also ist es vielleicht eine Timing-Sache. Das funktioniert für mich: * route/employees.js * gibt 'this.store.findAll ('employee') zurück, während * route/employees/new.js * 'this.store.createRecord (' employee ')' zurückgibt und es funktioniert gut. Haben Sie die Möglichkeit, eine neue Route hinzuzufügen? –

Antwort

1

Ich frage mich, ob es eine Timing-Sache ist. Neue Datensätze erscheinen im Datenspeicher für mich großartig, wenn ich eine Unterroute verwende ... d. routes/employees.js gibt this.store.findAll('employee') zurück, während routes/employees/new.jsthis.store.createRecord('employee') zurückgibt.

Wenn eine neue Route keine Option ist, wird vielleicht ein Versprechen helfen?

export default Ember.Route.extend({ 

    model() { 
    // forces a createRecord after the store is already loaded with all employees 
    var newEmployeePromise = new Ember.RSVP.Promise((resolve, reject) => { 
     let allEmployees = this.store.findAll('employee'); 
     allEmployees.then(() => { 
     resolve(this.store.createRecord('employee')); 
     }, (error) => { 
     reject(error); 
     }); 
    }); 

    return Ember.RSVP.hash({ 
     employeeList : this.store.findAll('employee'), 
     employee : newEmployeePromise, 
    }); 
    } 
} 
+1

Nicht sicher, was Sie hier erreichen wollen, aber das sieht ein bisschen besser aus oder was? http://dpaste.com/1EKCFET –

1

können Sie setupController hook verwenden, um das Problem zu beheben.

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model() { 
    return Ember.RSVP.hash({ 
     employeeList : this.store.findAll('employee'), 
     employee : this.store.createRecord("employee"), 
    }) 

    setupController(controller, model) { 
    controller.set('employeeList', model.employee); 
    } 
}); 

Hope this help you !!!

+0

löscht das nicht die "employeeList" und ersetzt sie durch einen einzigen Mitarbeiter? –

2

Versuchen Sie die store.push-Methode zu verwenden.

"Push verwendet wird Ember Data Shop von neuen oder aktualisierten Datensätze zu benachrichtigen, dass im Backend existiert Dies wird wieder einen Datensatz in dem loaded.saved Zustand"

store.push(store.normalize('employee', savedEmployee)); 

Mehr: http://emberjs.com/api/data/classes/DS.Store.html#method_push

1

Wenn Sie einen neuen Datensatz über this.store.createRecord() erstellen, wird der Speicher automatisch aktualisiert, sodass Sie die Seite nicht aktualisieren müssen, da sie automatisch aktualisiert wird.
Wenn Sie noch müssen Sie die Seite aktualisieren, wie Sie sagten, Sie This.Refresh() aufrufen können .. Sie haben bitte einen Blick auf twiddle

Wenn Sie glut-twiddle für nicht working.it gut sein würde .