Ich habe eine DS.Store
die die DS.RESTAdapter
verwendet und ein ChatMessage
Objekt definiert als solche:Artikel wird hinzugefügt, um gefilterte Ergebnis von Ember-Daten
App.ChatMessage = DS.Model.extend({
contents: DS.attr('string'),
roomId: DS.attr('string')
});
Beachten Sie, dass eine Chat-Nachricht existiert in einem Raum (der Einfachheit halber nicht gezeigt) , so in meinem Chat-Nachrichten-Controller nur (die Ember.ArrayController
erstreckt) ich will, ist der Anwender für den Raum-Nachrichten laden in:
loadMessages: function(){
var room_id = App.getPath("current_room.id");
this.set("content", App.store.find(App.ChatMessage, {room_id: room_id});
}
Hier wird die content
auf eine DS.AdapterPopulatedModelArray
und meine Ansicht zeigt glücklich alle zurückgegebenen Chat-Nachrichten in einem {{#each}}
Block an.
Jetzt kommt es eine neue Nachricht zu geben, habe ich im Anschluss an den in demselben Controller:
postMessage: function(contents) {
var room_id = App.getPath("current_room.id");
App.store.createRecord(App.ChatMessage, {
contents: contents,
room_id: room_id
});
App.store.commit();
}
Dies löst eine Ajax-Anforderung die Nachricht auf dem Server zu speichern, alles so weit gut, aber es doesn Aktualisieren Sie die Ansicht nicht. Dies macht ziemlich viel Sinn, da es ein gefiltertes Ergebnis ist und wenn ich den room_id Filter auf App.store.find
entferne, dann wird es wie erwartet aktualisiert.
Wenn Sie versuchen, this.pushObject(message)
mit dem Nachrichtendatensatz zu senden, der von App.store.createRecord
zurückgegeben wird, wird ein Fehler ausgegeben.
Wie kann ich den Artikel manuell zu den Ergebnissen hinzufügen? Soweit ich das beurteilen kann, scheint es keinen Weg zu geben, da sowohl als auch DS.FilteredModelArray
unveränderlich sind.
Du hast Recht, es ist ein AdapterPopulatedModelArray. Ich habe die Frage aktualisiert - Entschuldigung für den Tippfehler! – rlivsey