我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
我在应用程序中使用RESTAdapter定义了一个商店,如下所示:
路由器被定义为:
当我运行我的应用程序时,每个具有相同结构的对象都会出现以下消息:
我无法确定问题的具体原因,但由于断言提到需要映射,我想知道:
如果您认为这不足以理解问题,我肯定可以添加更多信息。
编辑:我已经在后端更改了一些内容,现在我的服务器上的findAll()等效操作将输出序列化为以下json:
这个调用
我不得不删除原始实现,这个实现被json.NET序列化。我找不到配置选项来产生Ember-Data期望的json输出(如
我目前正在尝试使用ember + emberdata + router + asp.net web api搭建一个项目。大部分都能正常运行,但是当ember-data通过适配器查找我的模型时,我遇到了一个错误信息。
在我的后端,我有一个像这样的模型(C#):
public class Genre {
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength=3)]
public string Name { get; set; }
}
在我的应用程序中,我使用Ember-data来表示它:
App.Genre = DS.Model.extend({
id: DS.attr("number"),
name: DS.attr("string")
}).reopenClass({
url: 'api/genre'
});
我在应用程序中使用RESTAdapter定义了一个商店,如下所示:
App.store = DS.Store.create({
revision: 4,
adapter: DS.RESTAdapter.create({
bulkCommit: false
})
});
并且在我的控制器中使用该存储库如下:
App.GenreController = Ember.ArrayController.extend({
content: App.store.findAll(App.Genre),
selectedGenre: null
});
路由器被定义为:
App.router = Em.Router.create({
enableLogging: true,
location: 'hash',
root: Ember.Route.extend({
//...
genre: Em.Route.extend({
route: '/genre',
index: Ember.Route.extend({
connectOutlets: function (router, context) {
router.get('applicationController').connectOutlet('genre');
}
})
}),
//...
})
})
当我运行我的应用程序时,每个具有相同结构的对象都会出现以下消息:
供参考,这是服务返回的json数据:Uncaught Error: assertion failed: 服务器返回了一个哈希键为0但您没有映射
[
{
"id": 1,
"name": "Action"
},
{
"id": 2,
"name": "Drama"
},
{
"id": 3,
"name": "Comedy"
},
{
"id": 4,
"name": "Romance"
}
]
我无法确定问题的具体原因,但由于断言提到需要映射,我想知道:
- 这个映射是什么以及如何使用它。
- 由于返回的json是一个数组,我是否应该在我的应用程序中使用不同类型的控制器,或者在使用这种类型的json时是否需要了解任何信息?或者我应该更改服务器中的JsonFormatter选项?
如果您认为这不足以理解问题,我肯定可以添加更多信息。
编辑:我已经在后端更改了一些内容,现在我的服务器上的findAll()等效操作将输出序列化为以下json:
{
"genres": [
{ "id": 1, "name": "Action" },
{ "id": 2, "name": "Drama" },
{ "id": 3, "name": "Comedy" },
{ "id": 4, "name": "Romance" }
]
}
但是我仍然无法在客户端中填充我的模型,而且我的错误消息已经变成了这样:
未捕获的错误: 断言失败: 您的服务器返回了一个带有键 genres 的哈希表,但您没有映射
不确定我还会做错什么。
抛出此异常的方法是sideload
,并像这样检查映射:
sideload: function (store, type, json, root) {
var sideloadedType, mappings, loaded = {};
loaded[root] = true;
for (var prop in json) {
if (!json.hasOwnProperty(prop)) { continue; }
if (prop === root) { continue; }
sideloadedType = type.typeForAssociation(prop);
if (!sideloadedType) {
mappings = get(this, 'mappings');
Ember.assert("Your server returned a hash with the key " + prop + " but you have no mappings", !!mappings);
//...
这个调用
sideloadedType = type.typeForAssociation(prop);
返回 undefined
,然后我收到了错误消息。方法 typeForAssociation()
检查 'associationsByName'
键是否存在,返回一个空的 Ember.Map
。
目前还没有解决方案。
顺便说一下...
我的操作现在是这样的:
// GET api/genres
public object GetGenres() {
return new { genres = context.Genres.AsQueryable() };
}
// GET api/genres
//[Queryable]
//public IQueryable<Genre> GetGenres()
//{
// return context.Genres.AsQueryable();
//}
我不得不删除原始实现,这个实现被json.NET序列化。我找不到配置选项来产生Ember-Data期望的json输出(如
{resource_name : [json, json,...]}
)。这个副作用是我失去了内置的OData支持,但我希望保留它。有人知道我该如何配置它来为集合生成不同的json吗?