2016-08-25 3 views
0

In meiner Ember-Anwendung mit Ember-Daten und JSONAPISerializer habe ich ein Aufgabenmodell und ein Prioritätsmodell. Eine Aufgabe gehört zu einer Priorität, und einer Priorität können viele Aufgaben zugeordnet sein.So ändern Sie ein Attribut zu einem Modell in Controller

Die Modelle sind wie folgt

app/Modell/task.js

export default DS.Model.extend({ 
    title: DS.attr ('string'), 
    description: DS.attr ('string'), 
    isComplete: DS.attr ('boolean'), 
    priority: DS.belongsTo('priority') 
}); 

app/Modelle/priority.js

export default DS.Model.extend({ 
    title: DS.attr ('string'), 
    description: DS.attr ('string'), 
    tasks: DS.hasMany ('task'), 
}); 

The Benutzer kann die ta bearbeiten sk und ändern Sie jedes Attribut einschließlich seiner Priorität. Dies wird in der Steuerung gehandhabt.

Das Bearbeitungsformular hat ein Dropdown-Feld, aus dem die Priorität ausgewählt werden kann. Diese Dropdownliste wird vom Controller ausgefüllt, indem der Speicher abgefragt wird.

Ich habe die Bearbeitung und Speicherung Teil für alle Attribute mit Ausnahme der Priorität arbeiten. Ich kann die geänderte Priorität beim Speichern der Aufgabe nicht beibehalten.

Was ich versucht habe, ist Abfrage der Speicher für die Priorität mit Titel, die den ausgewählten Wert in der Dropdown-Liste und setzen Sie das im Modell.

Der Code in der Steuerung bei meinem ersten Versuch war wie folgt und das hat nicht funktioniert.

var newPriority = this.get('store').queryRecord('priority', { 
    filter: { 
     title: newPriorityTitle 
    } 
}); 
this.get('model').set('priority', newPriority); 

Wie kann die Priorität vor dem Speichern des Modells geändert werden?

Update:

änderte ich den Anfangscode der unten und das scheint

this.get('store').queryRecord('priority', { 
    filter: { 
     title: newPriorityTitle 
    } 
}).then(function(data) { 
    this.get('model').set('priority', data); 
}); 
+0

Wie stellen Sie Priorität für die Aufgabe? –

+0

Ich frage den Speicher nach Priorität mit dem Titelwert aus dem Dropdown und versuche dann, das auf das Modell zu setzen, das nicht funktioniert. Details hinzugefügt in meiner ursprünglichen Frage. – smartreference

+0

Vielleicht hilft uns Ihr Code zur Einstellung der Priorität. Aber 'task.set ('priority', selectedPriority);' sollte funktionieren –

Antwort

0

zu arbeiten, weil this.store.queryRecord (...) den Datensatz nicht zurückgeben (sofort), es gibt ein Versprechen zurück.

Sie zu tun haben:

newPriority.then((priorityObj) => { 
    this.model.set('priority', priorityObj); 
} 
+0

Wenn Sie sich nicht darum kümmern, dass Daten sich geändert haben, können Sie Ihren Code ändern, um peekRecord zu sagen (da Sie wahrscheinlich bereits die Prioritäten in den Speicher geladen haben, um die Dropdownliste zu füllen) und dann synchron zurückkehrt. t müssen Sie in ein dann ... wieder einwickeln, nur wenn Sie nicht besorgt sind, dass der Prioritätsdatensatz, den Sie im Geschäft haben, seit dem Laden nicht geändert hat. –

+0

Danke für den Tipp Robert, das habe ich gemacht und es zum arbeiten gebracht. – smartreference

Verwandte Themen