8

我有一个使用 .NET Web API 编写的现有服务。

例如,此服务以以下格式返回 JSON:

[
  { "id": 1, "name": "John" },
  { "id": 2, "name": "Jane" }
]

但是,根据Ember.js Rest Adapter 文档,Ember 期望 JSON 采用以下格式:

{
  "persons": [
    { "id": 1, "name": "John" },
    { "id": 2, "name": "Jane" }
  ]
}

因此,Ember 返回以下错误: 您的服务器返回了一个带有键 0 的哈希,但您没有它的映射

我绝不打算更改我的服务 API 及其返回数据的方式。

是否有可能让 Ember.js(最新版本)处理我的服务返回的现有数据?如果是这样,我该如何实施?

4

3 回答 3

5

从这个意义上说,Ember 非常灵活,能够扩展适配器和序列化程序,以便将您的应用程序与任何后端 API 集成。

您应该获得 WebAPIAdapter,它是Ember.js Template for Web API的一部分。

此外,您可能想看看我作为示例编写的这个项目,它基于相同的模板(我自己做了一些修改)。它仍在开发中,还没有包含所有最佳实践(还),但我认为这是一个有效的例子。

您还应该查看这个repo / library (您也可以通过 NuGet安装它),它允许您将 Handlebars 模板直接预编译到Ember.TEMPLATES集合中。

于 2013-04-05T17:25:21.823 回答
0

在 web api 中只返回 new { object }

var persons = _personbService.GetPeople;
        return new { persons };

这会将您的对象包装在同名的对象中。如果您需要调用该对象,请执行其他操作

new { SomeOtherName = persons; }
于 2014-08-24T19:09:37.193 回答
0

我在 ember 中遇到了这个问题,发现对我来说最好的解决方案是构建一个新的序列化程序并覆盖 normalizePayload 方法。下面的代码:

export default DS.RESTSerializer.extend({
normalizePayload: function(payload) {
var root = "posts";
var output = {};
output[root] = payload;
return output;

} });

这包装了初始响应并为其添加了根,希望对您有所帮助!

于 2015-08-29T22:04:30.780 回答