Ember.JS和ember-data在使用Router时抛出含糊的错误消息

时间:2012-07-30 10:02:28

标签: javascript ember.js ember-data

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

这是通过组合URL中的Ember Router处理搜索参数和处理用户点击“保存”的视图(视图包含在小提琴中,但无法像没有包含模板 - 见下文。

每当我运行应用程序时,都会出现以下错误:

Uncaught TypeError: Cannot call method 'set' of undefined 

您可以在下面列出的小提琴中看到跟踪,但它似乎源于ember-data中的控制器存储注入。不幸的是,我对Ember [-data]的了解并不足以让我知道这与其他应用程序的关系。

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

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

我把它与其他类似的项目和例子进行了比较,特别是那些给出了ember-data的项目和例子,并不完全清楚我在这里做错了什么。我很感激任何见解!

2 个答案:

答案 0 :(得分:3)

首先:当您使用路由器创建应用程序时,您不必创建Store,Controllers,Views的实例。当调用App.initialize()时,ember会为你进行实例化和注入。

然后,您将有权访问:

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

好吧,我让你尝试修改代码。现在让我再次陷入困境:)

答案 1 :(得分:0)

你试过让你的控制器上课吗?因此,请使用Checklist.SavedSearchController。而不是Checklist.savedSearchController。