Ruby on rails Emberjs+;数据+;rails-未捕获类型错误:无法调用方法';地图';未定义的
当我试图用emberjs+ember数据从rails db加载数据时,我遇到了这个错误 未捕获的TypeError:无法调用未定义的方法“map” 以下是coffescript代码:Ruby on rails Emberjs+;数据+;rails-未捕获类型错误:无法调用方法';地图';未定义的,ruby-on-rails,ember.js,ember-data,Ruby On Rails,Ember.js,Ember Data,当我试图用emberjs+ember数据从rails db加载数据时,我遇到了这个错误 未捕获的TypeError:无法调用未定义的方法“map” 以下是coffescript代码: window.Cosmetics = Ember.Application.create Cosmetics.store = DS.Store.create revision: 4 adapter: DS.RESTAdapter.create bulkCommit: false Cosmetic
window.Cosmetics = Ember.Application.create
Cosmetics.store = DS.Store.create
revision: 4
adapter: DS.RESTAdapter.create
bulkCommit: false
Cosmetics.admin_user = DS.Model.extend({
name: DS.attr('string')
email: DS.attr('string')
});
Cosmetics.view = Ember.View.extend
templateName: 'ember/views/aaa'
Cosmetics.admin_user.reopenClass
url: 'admin/user'
Cosmetics.store.findAll(Cosmetics.admin_user)
控制器获取正确的JSON数据。我试着从互联网上找到的示例映射代码,但没有任何帮助。有什么想法吗?我想我做错了什么。提前感谢您的帮助。ember data希望findAll结果嵌套在模型的复数形式下: 余烬数据所期望的:
{
"users": [
{
"activated": null,
"created_at": "2012-05-14T19:35:44Z",
"email": "john@doe.com",
"id": 1,
"name": "john doe",
"updated_at": "2012-05-15T20:23:06Z"
}
]
}
在您的示例中得到了什么:
[
{
"activated": null,
"created_at": "2012-05-14T19:35:44Z",
"email": "john@doe.com",
"id": 1,
"name": "john doe",
"updated_at": "2012-05-15T20:23:06Z"
}
]
具体来说,错误来自于ember获取JSON响应并在“users”键下的所有内容上运行“map”,在您的情况下,该键不存在,因此在“undefined”上调用“map”。我遇到了完全相同的问题。解决这个问题的方法是在控制器中的
索引
操作中呈现JSON时添加根节点。这意味着改变这一行:
format.json { render json: @things }
为此:
format.json { render json: { things: @things }}
这是因为Ember数据需要JSON对象中的根节点,但Rails默认不包含它
我希望这能有所帮助。我终于找到了解决办法
我不确定是否应该这样做,但这足以消除批量提交。因此,商店应该是这样的:
Cosmetics.store = DS.Store.create
revision: 4
adapter: DS.RESTAdapter.create
bulkCommit:false
导致了uncaughttypeerror:无法调用未定义的
错误的方法“map”
这个问题似乎只与rails应用程序中使用的余烬数据有关
我似乎有点匆忙,因为似乎解决了问题的东西,引起了另一个问题| 发现问题,不确定解决方案 如果您的资源是在命名空间下提供的,例如
App.Event = DS.Model.extend({
name: DS.attr('string'),
});
App.Event.reopenClass({
url: 'api/event'
})
当余烬数据解析json响应时,它在findAll
中执行类似于json[multiple]
的操作,这应该是json['events']
,但是复数被计算为json['api/events']
,因此产生错误。我会四处打听,也许会为此买单
更新
我已经为此创建了一张票证
解决方法
作为一名黑客,我正在这样做:
def index
respond_to do |format|
format.json { render json: { 'api/events': Event.all } }
end
end
问题的根本原因是函数的多重化,因此解决方法是修复它;)
你能给出一个从服务器返回的对象的例子吗?旧版本的ember和更新版本的数据也有一个bug,会触发上述错误,您使用的是什么版本的ember?@CoryLoken这是rails返回的示例对象-。关于emberjs版本,我使用的是ember rails gem附带的版本,但出于安全考虑,我尝试使用从github下载的最新版本(0.9.7.1),但没有成功。使用ember rails 0.6.0打包的emberjs版本也有同样的问题吗?恐怕不是这样。我尝试过在控制器中添加一个符号
:users
到response\u,使用
来获得嵌套响应,但仍然是相同的错误。ember data latest.js中的ids=hashes.map(function(hash){…}
)不断出现问题。这或多或少是@tvon建议的。这似乎是个问题,但添加根节点没有帮助(很遗憾)。无论如何,谢谢。这很奇怪。你试过调试它吗?你确定你使用的是最新版本吗?
DS.RESTAdapter.reopenClass({
pluralize: function(name) {
if (!this.plurals[name])
name = name.substring(name.lastIndexOf('/')+1);
return this.plurals[name] || name + "s";
}
});