【问题标题】:what is the correct way to use coffeescript with ember´s Mixins?将咖啡脚本与 ember 的 Mixins 一起使用的正确方法是什么?
【发布时间】:2013-08-12 00:06:20
【问题描述】:

为我的英语道歉,

我正在尝试使用 mixin 扩展视图。代码是咖啡脚本:

查看 -films_film_view.js.coffee

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

  templateName: 'films/show'

混合 - 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 仍未初始化并导致错误。

【问题讨论】:

    标签: ember.js coffeescript


    【解决方案1】:

    发生这种情况是因为在运行时:

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

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

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

    【讨论】:

    • 我在不同的文件夹中有应用程序,但如果我重构代码以将所有内容加入一个文件中,现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多