我在 peepcode.com 上购买了 Ember.js 的 play by play 并按照提供的视频进行跟踪。
所以,我在 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"
}
}
所以我在 ember.js 中设置了 Store 和 Actor Model
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')
});
我启动了我的 Ember 应用程序,没有发生错误。
但是当我尝试使用控制台获取模型时(我已经在 Rails DB 中保存了一个 ID 为 1 的模型)
GithubScore.Actor.find(1)
它返回一个类,没有发生错误,但是当我尝试获取它的属性时。它只返回 null,尽管模型的状态为“isLoaded”
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.Store 扩展而来的。
它没有 DS.store 已有的 find(type, id) 方法。
我找不到问题所在。你能给我一些帮助吗?
感谢您的阅读!