【问题标题】:Ember Data RESTAdapter is not Submitting Requests to the Server when I run Model#find()当我运行 Model#find() 时,Ember Data RESTAdapter 未向服务器提交请求
【发布时间】:2013-06-12 23:55:05
【问题描述】:

我正在开发一个 Ember 应用程序。我从 localhost 上的同一服务器提供 API 和 ember 应用程序。

我很确定我的 API 符合 Ember 规范(尽管我不确定,因为给出了相互冲突的信息 herehere。第二个站点链接到 this Ember 博客文章,并且是应该是 Ember 约定的形式化)。我的 API 遵循第二个链接的样式,因此请求 host/api/users/1,例如,返回:

{
  "users": [{
      "username": "jojo"
      etc..
  }]
}

我知道我的 API 正在工作,因为我可以使用 curl 对其进行测试。我的问题是 Ember 数据似乎没有发出请求。 Chrome 开发者工具网络选项卡显示,当我运行App.User.find() 时,没有发送加载数据的请求。但是我确实得到了这个:

这是我定义商店的咖啡脚本代码:

App.Store = DS.Store.extend
  revision: 13
  url: 'http://localhost:9292/'
  adapter: DS.RESTAdapter

DS.RESTAdapter.reopen
  namespace: 'api'

这里是我为“用户”定义模型、控制器和路由的地方:

App.UsersRoute = Ember.Route.extend
  model: ->
    App.User.find()

App.UsersController = Ember.ArrayController.extend()

App.User = DS.Model.extend
  username: DS.attr 'string'
  url: DS.attr 'string'
  projects: DS.hasMany 'App.Project'
  query_instances: DS.hasMany 'App.QueryInstance'

我在这里遗漏了什么重要的东西吗?一般来说,我是 Ember 和客户端开发的新手——也许这里有明显的解决方案,但我不知道它们。如果有人能提供一些关于调试 Ember 的一般提示,我将不胜感激。

【问题讨论】:

标签: ember.js ember-data


【解决方案1】:

由于框架非常简陋,除了浏览器控制台和调试 ember 应用程序的调试关联之外,仍然没有太多工具,但有些东西可以帮助完成这项任务。

1. 尚未准备好迎接黄金时段,但对于检查 ember.js 应用程序非常有用的是 ember extension for chrome.

2. 因为这个PR 存在设置标志LOG_ACTIVE_GENERATION 以获取有关ember 在后台生成什么的信息的可能性。可以通过以下方式简单地启用活动生成日志记录:

App = Ember.Application.create({
  LOG_ACTIVE_GENERATION: true
});

3.__container__ 仅用于调试但非常有用,您可以像这样轻松检查 ember-data 所知道的关于其模型的所有内容:

App.__container__.lookup('store:main').recordCache

这将使您可以访问商店的记录缓存,例如所有加载的记录。 要更详细地检查,您可以像这样访问特定记录:

App.__container__.lookup('store:main').recordCache[7].get('data.attributes')

4.另外一件可能也有用的事情是定义/覆盖全局错误处理程序以捕获 ember 应用程序内发生的所有错误:

Ember.onerror = function(error) {
  console.log(error);
}

5.还可以使用log handlebars helper 直接在模板中记录记录

{{log post}}

或者简单地设置一个调试器断点来进一步检查

{{debugger}}

希望这些信息可以帮助您成功调试您的应用程序。

【讨论】:

  • 感谢所有伟大的建议!我相信这些东西会派上用场的。不过,我仍在研究这个特定问题——你知道什么会导致 Ember Data 甚至不发出请求吗?它在控制台中告诉我它正在使用 RESTAdapter,但我将如何确认这一点。除了find() 之外,是否有命令告诉 Ember 数据发出请求?谢谢。
  • @SeanMackesey 你可以使用findAll() 但不确定这是否能解决你特别的问题。您也可以尝试删除以测试您定义的关系,因为这可能会导致 RestAdapter 根本不发出任何请求。
【解决方案2】:

我能够通过升级到最新版本的 Ember 和 Ember 数据来解决这个问题。我认为我使用的是不兼容的版本。我最初使用Yeoman ember generator 生成了我的项目。我严重怀疑这个生成器实际上会给你不兼容的版本,所以我不太确定问题是什么。可能是:

  • 我的凉亭缓存有问题
  • DS.Store 声明中的 revision 编号声明不正确,我可能已更改,因为我不清楚是否需要包含它。最新版本不需要它,但这不是 Yeoman 生成器提供的。所以我可能已经删除了它,然后用错误的版本号重新添加了它。

无论如何,对于遇到类似问题的其他人,我建议您升级您的 Ember 和 Ember Data 版本并确保它们兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多