【问题标题】:Can't Retrieve Model Data无法检索模型数据
【发布时间】:2013-05-18 21:41:44
【问题描述】:

我开始通过 ember-rails gem 将 Ember.js 与 Rails 3.2.13 一起使用。我无法使用以下命令通过浏览器控制台访问数据:

var posts = App.Post.find();

在控制台返回undefined,但在服务器日志中输出如下:

Started GET "/posts" for .......
Processing by PostsController#index as JSON
Parameters: {"posts"=>{}}
Post Load SELECT "posts".* FROM "posts"
Completed 200 OK .....

如果我做错了什么或遗漏了什么,请告诉我。谢谢


这是我安装 ember-rails 的步骤

1) 将 ember-rails 添加到 gem 文件中

2) 安装包后,我运行:

rails g ember:bootstrap

有 MVC 目录,app.js、application.js、router.js 和 store.js。

store.js 有以下内容:

App.Store = DS.Store.extend({
  revision: 11
});

3) 然后我做了

rails g scaffold Post title:string body:text

接下来我添加了 active_model_serializer gem 并为 Post 生成了一个序列化器。

【问题讨论】:

  • App.Post.find(); 是异步的,所以我想如果您打开网络选项卡(假设是 chrome),您会立即从浏览器控制台返回 undefined,这是正常的,您应该会看到正在发出 xhr 请求,单击它,然后转到子选项卡Response 并查看是否有您的数据。如果它在那里,那么一切都正常工作。现在,为什么你在控制台中变得未定义?好吧,我猜因为控制台不是异步的 :) 并且没有等待响应返回,所以你得到了未定义,这有意义吗?
  • 我了解异步部分,但基于此tutorial 他们如何能够访问数据?我的步骤非常相似,所以我没有做什么? - 谢谢
  • 嗯,您使用的教程已经有一年多的历史了……从那时起,在 ember 土地上发生了很多变化,您也许应该使用不同的更新教程。

标签: ruby-on-rails ember.js ember-data ember-rails


【解决方案1】:

您能否检查来自服务器的实际响应(在 Chrome 中,打开检查器,在网络面板中找到请求并查看响应)?确保服务器实际上返回了正确的 JSON。 (同样显然,我假设您已经在 Rails 服务器上创建了一些 Post 模型)。

接下来,确保您的序列化程序下列出了正确的attributes;我认为默认情况下它只包含 id。

您也可以尝试将 id 传递给 find: App.Post.find(1) 并再次查看服务器响应是什么。

App.Post.find() 是异步的,但它总是返回一个数据承诺——它永远不应该返回未定义的。您可以在模型 Promise 上调用 .then() 并传递一个函数,期望加载的模型作为参数在 Promise 解决后立即运行。

希望这会有所帮助。尝试检查服务器响应,如果有任何不清楚的地方,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2015-03-08
    • 2013-11-16
    相关资源
    最近更新 更多