2013-05-01 46 views
3

我的Rails应用程序用于生产JSON是这个样子:格式化Ember的Rabl或将Ember映射到Rabl?

{"paintings": 
    [ 
    {"id":1,"name":"a"}, 
    {"id":2,"name":"b"} 
    ] 
} 

我加Rabl的JSON格式,而现在的JSON看起来是这样的:

[ 
    {"id":1,"name":"a"}, 
    {"id":2,"name":"b"} 
] 

灰烬告诉我

Uncaught Error: assertion failed: Your server returned a hash with the key 0 but you have no mapping for it 

我该如何让Ember理解这一点?或者我应该如何让饶舌变得容易理解?

回答

1

您可以延长DS.RESTSerializer并更改extractextractMany。以下仅仅是一个副本,从我在.NET中使用串行粘贴,对于同样的情形:

window.App = Ember.Application.create(); 
var adapter = DS.RESTAdapter.create(); 
var serializer = Ember.get(adapter, 'serializer'); 
serializer.reopen({ 
    extractMany: function (loader, json, type, records) { 
     var root = this.rootForType(type); 
     root = this.pluralize(root); 
     var objects; 

     if (json instanceof Array) { 
      objects = json; 
     } 
     else { 
      this.sideload(loader, type, json, root); 
      this.extractMeta(loader, type, json); 
      objects = json[root]; 
     } 

     if (objects) { 
      var references = []; 
      if (records) { records = records.toArray(); } 

      for (var i = 0; i < objects.length; i++) { 
       if (records) { loader.updateId(records[i], objects[i]); } 
       var reference = this.extractRecordRepresentation(loader, type, objects[i]); 
       references.push(reference); 
      } 

      loader.populateArray(references); 
     } 
    }, 
    extract: function (loader, json, type, record) { 
     if (record) loader.updateId(record, json); 
     this.extractRecordRepresentation(loader, type, json); 
    } 
}); 

并设置你的店前,您必须配置模型能够正常侧向载荷:

serializer.configure('App.Painting', { 
    sideloadAs: 'paintings' 
}); 

App.Store = DS.Store.extend({ 
    adapter: adapter, 
    revision: 12 
}); 

现在您应该可以将无根JSON负载加载到您的应用程序中。

(见fiddle

+0

谢谢你,这是我一直在寻找的答案。 – 2013-05-01 18:31:06

3

实测值的溶液中。我index.json.rabl是这样的:

collection @paintings 
extends 'paintings/show' 

现在看起来是这样的:

collection @paintings => :paintings 
extends 'paintings/show' 
+0

这实际上可能会更好,所以在这种情况下,您不必延长串行器 – MilkyWayJoe 2013-05-01 18:35:39

+0

是的,但我也试图更好地理解串行器 – 2013-05-01 18:59:06