使用coffeescript与ember的Mixins的正确方法是什么?

时间:2013-08-09 23:35:16

标签: ember.js coffeescript

为我的英语道歉,

我正在尝试使用mixin扩展View。代码是coffeescript:

查看 - films_film_view.js.coffee

App.FilmsFilmView = Em.View.extend App.ModalViewMixin,

  templateName: 'films/show'

Mixin - modal_view_mixin.js.coffee

App.ModalViewMixin = Em.Mixin.create

  modalView: null

  click: ->
    @showModalView()

  close: ->
    @closeModalView()


  closeModalView: ->
    if @modalView
      @modalView.close()


  showModalView: ->
    @closeModalView()
    @modalView = @createModalView()
    if @modalView
      @modalView.append()

当我尝试加载应用时,应用会抛出此错误:

Assertion failed: Expected hash or Mixin instance, got [object Undefined] 

那么,写这个的正确方法是什么?

提前致谢

更新

解决:

App.ModalViewMixin = Em.Mixin.create

  modalView: null

  click: ->
    @showModalView()

  close: ->
    @closeModalView()


  closeModalView: ->
    if @modalView
      @modalView.close()


  showModalView: ->
    @closeModalView()
    @set modalView, @createModalView()
    if @modalView
      @modalView.append()



App.FilmsFilmView = Em.View.extend App.ModalViewMixin,

  templateName: "films/show"

当应用程序加载“FilmsFilmView”时,mixin仍未初始化并导致错误。

1 个答案:

答案 0 :(得分:2)

这种情况发生在运行时:

App.FilmsFilmView = Em.View.extend(App.ModalViewMixin, ...

App.ModalViewMixin未定义,必须在使用之前定义。

确保App.ModalViewMixin之前出现App.FilmsFilmView