1

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

这通过结合使用RouterURL 中的 Ember 处理搜索参数和处理用户单击“保存”的视图(视图包含在小提琴中,但由于不包含模板而无法运行 - 见下文)。

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

Uncaught TypeError: Cannot call method 'set' of undefined 

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

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

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

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

4

2 回答 2

3

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

然后,您将可以访问:

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

好吧,我让你尝试修改代码。当你再次被卡住时让我现在:)

于 2012-07-30T13:51:48.397 回答
0

你试过让你的控制器成为一个类吗?因此,请尝试 Checklist.SavedSearchController,而不是 Checklist.savedSearchController。

于 2012-07-30T17:33:47.813 回答