pushPayload的时间?将记录保存到ember-data

时间:2014-04-02 15:17:12

标签: 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": {},
    "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

1 个答案:

答案 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);
  }
});