Ember-data DS.Model.find() 似乎不起作用



我在 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 上遇到了同样的问题,并且在之前关于堆栈溢出的问题中也从其他人那里报告过。

最新更新