javascript - Ember.JS 和 ember-data 在使用路由器时抛出神秘的错误消息

标签 javascript ember.js ember-data

我正在为 Ember 应用程序开发保存的搜索功能,总体思路是在执行搜索后,您可以选择输入搜索的短名称并将其保存到 localStorage并稍后从下拉列表中检索它,同时还能够与其他用户共享当前 URL 并让他们看到相同的搜索。

这通过组合 Ember Router 处理 URL 中的搜索参数和处理用户点击“保存”的 View ( View 包含在 fiddle 中,但不能由于不包含模板而运行 -- 见下文)。

每当我运行该应用程序时,我都会收到以下错误:

Uncaught TypeError: Cannot call method 'set' of undefined 

您可以在下面列出的 fiddle 中看到跟踪,但它似乎源于 ember-data 中的 Controller 存储注入(inject)。不幸的是,我对 Ember[-data] 的了解还不够深入,无法了解它与应用程序其余部分的关系。

我已经获取了应该独立工作的应用程序的相关部分并在 JSFiddle 中运行它们,但仍然会导致相同的错误。 fiddle 位于 http://jsfiddle.net/fetcU/ .目前,该 fiddle 中没有 Handlebars 模板或任何东西,因为它们不会导致问题。

在引入 Router 之前,localStorage 适配器和其他部分独立工作良好,因此它可能与现在由 Checklist.initialize() 运行的代码有关(在添加路由器之前这不是必需的)。

我已经将其与其他类似的项目和示例进行了比较,尤其是那些为 ember-data 提供的项目和示例,但我并不完全清楚我在这里做错了什么。如果有任何见解,我将不胜感激!

最佳答案

第一件事:当您创建带有路由器的应用程序时,您不必创建 Store、Controllers 和 Views 的实例。当调用 App.initialize() 时,ember 会为你完成实例化和注入(inject)。

然后,您将可以访问:

  • Controller ,通过路由器(在 connectOutlets() 中),通过 router.get(xxxController),其中 xxx 是例如应用程序(用于访问基本 Controller ),或 savedSearch 用于访问您的 savedSearchController。
  • 商店,通过调用 router.get('store') 从路由器
  • 通过调用 this.get('controller') 来自 xxxView 的 xxxController,或来自带有 view.controller 的模板
  • 来自 Controller 的路由器,通过调用 this.get('target')

好吧,我让你试试修改代码。当你再次陷入困境时让我来 :)

关于javascript - Ember.JS 和 ember-data 在使用路由器时抛出神秘的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719219/

相关文章:

ember.js - ember-cli 在 --environment=production 上失败(未捕获错误 : Could not find module)

ruby-on-rails - 有谁知道为什么 ember-data beta 6 会序列化像这样的日期属性 "1392258472591"

javascript - 在 Ember 中,如何创建一个组件来响应另一个组件的操作?

json - Ember 数据 REST 更改 JSON

ember.js - 如何使用 Ember Data 1.0.0-beta.1 在控制台中查找模型?

javascript - 我可以在javascript中使用大括号来分隔代码段吗

javascript - 将 css 类添加到 Angularjs 中的标记元素

javascript - 具有复杂计算的异步回调Javascript

javascript - Wordpress 在 ajax 请求回调中获取当前页面名称或 ID

javascript - 如何从 Google API 获取 Ember 中自动完成字段的数据