Ember.js 现在是推送有效载荷的时候了?将记录保存到余烬数据

Ember.js 现在是推送有效载荷的时候了?将记录保存到余烬数据,ember.js,websocket,ember-data,Ember.js,Websocket,Ember Data,编辑,因为我缩小了问题的范围 我正在开发一个将API数据作为JSON接收的应用程序。它是一个组数组,包含“name”、“id”和其他类似元素 { "status": "success", "data": { "groups": [ { "id": 7100, "name": "Test 12345", "kind": "floor", "parent_group_id": 7000, "controlled_device_type_count

编辑,因为我缩小了问题的范围

我正在开发一个将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
}}
**更新…**我的索引路线:

    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');


}
});
更新:

所以现在我看到了livestream的出现——在短暂的瞬间——我看到了API数据(组名),然后它消失了。我想这是因为我只是“推送许多”记录,删除旧记录,而不是更新。我听说/读到pushPayload可能是我的解决方案……但我想不出来。根本没有(当我把它放进去时,我只得到一个错误:“未捕获的错误:找不到'0'的模型”帮助

有什么想法吗

非常感谢


ptep

您的API的有效负载不是ember data所期望的格式(默认情况下,它会在JSON的根目录中查找您的有效负载)。您需要在
应用程序适配器上覆盖
提取数组
(很可能是
提取单个
),如下所示:

ApplicationAdapter = DS.RESTAdapter.extend({
  extractArray: function(store, type, payload, id, requestType) {
    payload = payload.data;
    return this._super(store, type, payload, id, requestType);
  }
});

没有骰子,虽然我确实更新了一点路由。关于我消失的数据问题的想法?谢谢,伙计!未捕获错误:没有找到“0”的模型。
错误将表明您尝试推入的JSON格式不正确-在名为
0
的有效负载中有一个键,它应该是
group
或者
groups
。请原谅这个可能“愚蠢”的问题…(如何)我可以告诉它使用
groups
?你应该做类似
store.pushPayload('{group:{…}')
或者
store.pushPayload('{groups:[{},{},{}]}')
的事情,而不是
store store.pushPayload('{0:{…}')
或者
store.pushPayload('{0:[{},{},{},{}]}')
。只需检查您的JSON以确保一切正常。:)