I tienen una DS.Store
que utiliza el DS.RESTAdapter
y un objeto ChatMessage
definido como tal:Adición del artículo a resultado filtrado de brasa datos
App.ChatMessage = DS.Model.extend({
contents: DS.attr('string'),
roomId: DS.attr('string')
});
Nota que existe un mensaje de chat en una habitación (no mostrado por simplicidad) , así que en mi controlador de mensajes de chat (que se extiende Ember.ArrayController
) yo sólo quiero cargar los mensajes de la sala el usuario se encuentra actualmente en:
loadMessages: function(){
var room_id = App.getPath("current_room.id");
this.set("content", App.store.find(App.ChatMessage, {room_id: room_id});
}
Esto establece el content
a un DS.AdapterPopulatedModelArray
y mi vista muestra felizmente todos los mensajes de chat devueltos en un bloque {{#each}}
.
Ahora se trata de añadir un nuevo mensaje, Tengo el siguiente en el mismo controlador:
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();
}
Esto inicia una solicitud de ajax para guardar el mensaje en el servidor, todo bien hasta ahora, pero doesn 't actualizar la vista. Esto tiene mucho sentido ya que es un resultado filtrado y si elimino el filtro room_id en App.store.find
, se actualiza como se esperaba.
Probar this.pushObject(message)
con el registro de mensaje devuelto desde App.store.createRecord
provoca un error.
¿Cómo agrego manualmente el elemento a los resultados? No parece haber una manera en lo que puedo decir, ya que tanto DS.AdapterPopulatedModelArray
como DS.FilteredModelArray
son inmutables.
Tienes razón, es un AdapterPopulatedModelArray. He actualizado la pregunta: disculpa por el error tipográfico. – rlivsey