编辑,因为我缩小了问题....
我正在开发一个采用API的应用程序 - 数据为JSON。它是一个包含“name”,“id”和其他类似元素的组数组。
{
"status": "success",
"data": {
"groups": [
{
"id": 7100,
"name": "Test 12345",
"kind": "floor",
"parent_group_id": 7000,
"controlled_device_type_count": {},
"is_top_level": true
}
]
}}
我还有一个livestream websocket - 数据作为JSON流。它应该更新第一个API中引用的元素。这两个人只分享“id”。
即时串流:
{
"group":{
"usage":{
"10":1,
"20":0,
"30":2,
"40":2
},
"last_change":"2014-03-24T05:56:10Z",
"id":7954
}}
**已更新...... **我的IndexRoute:
App.ApplicationAdapter = DS.RESTAdapter.extend({
extractArray: function(store, type, payload, id, requestType) {
payload = payload.data;
return this._super(store, type, payload, id, requestType);
}
});
App.IndexRoute = Ember.Route.extend({
sortProperties: ['id'],
sortAscending: true,
beforeModel: function() {
var socket = window.io.connect('http://localhost:8887');
var self = this;
socket.on('group_live_stream', function(data){
var dataObj = JSON.parse(data);
self.store.push('group',dataObj.group);
});
},
actions: {
toggleMenu: function() {
this.controller.toggleProperty('menuVisible');
this.controller.pushBody();
} },
activate: function() {
var self = this;
$.getJSON('http://localhost:3000/api/groups/top?subscribe=true').then(function(data) {
self.store.pushMany('group', data.data.groups);
});
},
model: function() {
return this.store.all('group');
}
});
更新:
所以现在我看到了直播 - 直到第二次 - 我看到了API数据(组名),然后它就消失了。我在想它是因为我只是“pushMany” - 记录并删除旧记录而不是更新。我听说/读过pushPayload可能是我的解决方案....但我无法弄明白。完全(当我把它放入时,我只是得到一个错误:“未捕获错误:没有找到'0'的模型”帮助?!
有什么想法吗?
非常感谢!
ptep
答案 0 :(得分:0)
您的API的有效负载不是ember-data期望的格式(默认情况下,它会在JSON的根目录中查找您的有效负载)。您需要覆盖extractArray
这样的内容extractSingle
(可能ApplicationAdapter
):
ApplicationAdapter = DS.RESTAdapter.extend({
extractArray: function(store, type, payload, id, requestType) {
payload = payload.data;
return this._super(store, type, payload, id, requestType);
}
});