在新创建的模型哈希中缺少烬数据映射
Ember Data Mapping Missing In Newly Created Model Hash
我有一个绑定到Rails API的Ember应用程序。
我的模型是这样定义的:
NewsCMS.NewsItem = DS.Model.extend({
title: DS.attr('string'),
date: DS.attr('date'),
body_html: DS.attr('string')
});
当应用程序启动时,它成功地拉入当前模型并显示它们,然而,当我创建一个新的NewsItem,并且该项目从API返回时,我得到一个错误:
未捕获错误:断言失败:您的服务器返回了带有键body_html,但没有映射
模型被成功地持久化到Rails API,所以问题肯定在于新创建对象的反序列化,但是使用了断点。
如果我比较rails API的索引操作返回的初始模型哈希值的结构和它的创建操作返回的单个模型哈希值的结构,它们是相同的,那么为什么Ember阻塞在新创建的模型上,而处理初始的、持久化的模型却没有问题呢?
查看异常的来源,我可以看到它在这里:
if (!sideloadedType) {
sideloadedType = this.sideloadMapping.get(prop);
if (typeof sideloadedType === 'string') {
sideloadedType = get(Ember.lookup, sideloadedType);
}
Ember.assert("Your server returned a hash with the key " + prop + " but you have no mapping for it", !!sideloadedType);
}
堆栈是这样的:
Ember.assert (ember.js:52)
DS.JSONSerializer.DS.Serializer.extend.sideload (ember-data.js:6482)
DS.JSONSerializer.DS.Serializer.extend.extract (ember-data.js:6424)
superWrapper (ember.js:946)
DS.Adapter.Ember.Object.extend.didCreateRecord (ember-data.js:6730)
DS.RESTAdapter.DS.Adapter.extend.createRecord.ajax.success (ember-data.js:7625)
RunLoop._prev (ember.js:4156)
Ember.handleErrors (ember.js:410)
invoke (ember.js:4154)
tryable (ember.js:4343)
Ember.tryFinally (ember.js:1101)
Ember.run (ember.js:4347)
DS.RESTAdapter.DS.Adapter.extend.createRecord.ajax.success (ember-data.js:7624)
jQuery.Callbacks.fire (jquery.js:1038)
jQuery.Callbacks.self.fireWith (jquery.js:1149)
done (jquery.js:8075)
jQuery.ajaxTransport.send.callback (jquery.js:8599)
问题出在API对模型的序列化上。我没有连接一个活动模型序列化器,以Ember期望的方式序列化模型。
我返回的是JSON格式:
{name:"", body:""}
当它需要看起来像这样时:
[
{ news_item: {
name: "",
body: ""}
}
]
所以Ember将它命中的第一个属性视为描述它将要反序列化的模型类型的键。当它检查如何处理这个模型时,它找不到任何映射到它的东西(因为它是一个模型的属性,而不是模型本身)。
相关文章:
- 在Javascript中,如何使用对象作为哈希映射的键
- jQuery将查询参数附加到当前哈希中,忽略重复项
- 如何在哈希中设置输入值
- Emberjs :哈希中的函数原型
- 为什么从位置哈希中选择下拉列表在 Chrome 上有效,但不适用于 Firefox、IE 或 Safari
- RegEx 用于从 JavaScript 中的 url 哈希中提取参数
- 从作为哈希映射中的键的对象中检索值
- 如何将帮助程序方法的输出用作 HAML 哈希中的值
- 删除窗口哈希中的 # 以在函数中使用
- 如何从返回的Facebook图形API哈希中提取数据
- javascript哈希映射中的QML集成错误
- 如何使用密钥名称的值来获取密钥名称(在哈希中)
- 如何从哈希中获取数字
- 如何在Javascript中初始化带有整数键的静态值哈希映射
- '这'当创建函数存储在哈希中的JS对象时,其作用域为窗口对象
- 按键和返回值从哈希中删除
- 如何将新元素附加到哈希中的同一个键
- 在新创建的模型哈希中缺少烬数据映射
- 如何从Ruby中的5字加密哈希中找到SHA1加密字符串
- 如何将插入的字符串/动态属性传递到Javascript哈希中