我在 peepcode.com 购买了Ember的播放.js并按照提供的视频进行操作。
因此,我在 Rails 中设置了模型、序列化器和控制器。
当我像这样输入 URL 时。
http://localhost:3000/actors/wycats
JSON 响应按我的预期呈现。(这可能是Ember-data期待的JSON形式。对吧?
{
"actor": {
"id": 1,
"blog": "http://www.yehudakatz.com",
"company": "Tilde, Inc.",
"email": "wycats@gmail.com",
"gravatar_id": "428167a3ec72235ba971162924492609",
"location": "San Francisco",
"login": "wycats",
"name": "Yehuda Katz",
"actor_type": "User"
}
}
所以我在余烬中建立了商店和演员模型.js
GithubScore.Store = DS.Store.extend({
revision: 11,
adapter: "DS.RESTAdapter"
});
GithubScore.Actor = DS.Model.extend({
login: DS.attr('string'),
name: DS.attr('string'),
gravatarId: DS.attr('string'),
location: DS.attr('string'),
blog: DS.attr('string')
});
我启动了我的余烬应用程序,没有发生错误。
但是当我尝试使用控制台获取模型时(我已经在 Rails DB 中保存了一个 ID 为 1 的模型)
GithubScore.Actor.find(1)
它返回一个类,没有发生错误,但是当我尝试获取它的属性时。它只返回 null,尽管模型的状态为"已加载"
GithubScore.Actor.find(1).get('isLoaded')
=> true
GithubScore.Actor.find(1).get('blog')
=> null
我发现当我第一次重复调用 GithubScore.Actor.find(1).get('isLoaded') 时,它只返回 false,但是当我尝试获取属性时,"isLoaded"会立即更改为 true。
GithubScore.Actor.find(1).get('isLoaded')
=> false (for many times)
GithubScore.Actor.find(1).get('blog')
=> null
GithubScore.Actor.find(1).get('isLoaded')
=> true (immediately changed)
当我尝试 .toJSON() 方法像视频一样建模时。它会引发错误。
GithubScore.Actor.find(1).toJSON()
=> TypeError: Object <GithubScore.Actor:ember272:1> has no method 'toJSON'
我好奇的一件事是,尽管 GithubScore.Store 对象是从DS扩展而来的。商店。
它没有 DS.store 已经拥有的find(type,id)方法。
我找不到问题所在。你能给我一些帮助吗?
感谢您的阅读!
尝试在模板中显示博客值并通过浏览器访问它。当你执行GithubScore.Actor.find(1).get('blog')
时,它会返回 null,因为 Ember 只是将一个对象重新调整为承诺,而仍在获取它的过程中。当您尝试改为在模板中显示值时,模板将绑定到该值,并在检索后进行更新。
至于isLoaded = true
,显然这是一个错误,我在 RecordArray 上遇到了同样的问题,并且在之前关于堆栈溢出的问题中也从其他人那里报告过。