【发布时间】:2012-04-03 16:38:31
【问题描述】:
我有一个DS.Store,它使用DS.RESTAdapter 和一个ChatMessage 对象,定义如下:
App.ChatMessage = DS.Model.extend({
contents: DS.attr('string'),
roomId: DS.attr('string')
});
请注意,聊天消息存在于房间中(为简单起见未显示),因此在我的聊天消息控制器(扩展 Ember.ArrayController)中,我只想为用户当前所在的房间加载消息:
loadMessages: function(){
var room_id = App.getPath("current_room.id");
this.set("content", App.store.find(App.ChatMessage, {room_id: room_id});
}
这会将content 设置为DS.AdapterPopulatedModelArray,我的视图很高兴地在{{#each}} 块中显示所有返回的聊天消息。
现在要添加一条新消息,我在同一个控制器中有以下内容:
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();
}
这会启动一个 ajax 请求以将消息保存在服务器上,到目前为止一切正常,但它不会更新视图。这很有意义,因为它是一个过滤结果,如果我删除 App.store.find 上的 room_id 过滤器,那么它会按预期更新。
使用从App.store.createRecord 返回的消息记录尝试this.pushObject(message) 会引发错误。
如何手动将项目添加到结果中?据我所知,似乎没有办法,因为 DS.AdapterPopulatedModelArray 和 DS.FilteredModelArray 都是不可变的。
【问题讨论】:
标签: ember.js ember-data