【问题标题】:Ember Mixin undefined in controllerEmber Mixin 在控制器中未定义
【发布时间】:2015-09-24 07:06:27
【问题描述】:

可能是一个愚蠢的问题,但似乎无法正确解决这个问题。我想在两个控制器之间共享一些操作,所以我想在 mixin 中定义它们,然后将它们包含在控制器中。我的语法与我在指南中看到的一致:

mixins/shared.js.coffee

Dashboard.Shared = Ember.Mixin.create
  actions:
    showTab: (tab) ->
      //handle action here

controllers/messages/messages_contacts_show_controller.js.coffee

Dashboard.MessagesContactsShowController = Ember.ObjectController.extend Dashboard.Shared,

在加载应用程序时,出现此错误:

Uncaught Error: Assertion Failed: Expected hash or Mixin instance, got [object Undefined] 

我不确定如何在控制器之前加载这个 mixin,因为我的文件是分开的(参考:what is the correct way to use coffeescript with ember´s Mixins?'已经尝试导入它,但不断从 coffeescript 收到“保留字”错误。

import { Shared } from './mixins/shared'

import Shared from "./mixins/shared"

在使用它的控制器之前加载 mixin 的正确方法是什么??

我使用的是 Ember 1.8.1

【问题讨论】:

  • App.Shared 是错字吗?
  • 您在对Ember.ObjectController.extend 的调用中指定Dashboard.Shared,而您在定义App.Shared。所以Dashboard.Shared 是未定义的,这是 Ember 试图尽可能清楚地告诉你的。
  • @Kingpin2k 正确。 Dashboard 是整个应用程序使用的命名空间。
  • @Kingpin2k(我只是在我的 S.O. 帖子中打错了它......它是 Dashboard.Shared 在代码中)

标签: ember.js coffeescript mixins


【解决方案1】:

假设您 require 您的 JS 文件在某个主要的 App 脚本中,问题很可能是“MessagesContactsShowController”排在“共享”之前。当您使用通配符 require 时,文件将按 alpha 顺序包含。您可以尝试将 Shared mixin 移动到其他文件夹,然后更改 require 语句的顺序,以便在 MessagesContactsShowController 之前处理它

【讨论】:

  • 太棒了!因为我没有使用 ember-cli,所以我不得不从我的命名空间中导入 mixin。 application.js.coffee 导入我的供应商文件,包括 ember 和 ember-data,然后我的 dashboard.js.coffee 文件需要在控制器之前添加 #require_tree ./mixins。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2014-02-26
  • 2020-08-02
  • 2014-12-18
  • 2015-11-06
相关资源
最近更新 更多