【问题标题】:Extending Backbone.Marionette Module With CoffeeScript, CommonJS使用 CoffeeScript、CommonJS 扩展 Backbone.Marionette 模块
【发布时间】:2014-05-20 02:11:39
【问题描述】:

我正在尝试使用commonJS 模式在coffeescript 中扩展marionette 的模块类,以便我可以要求一个通用模块类在我的应用程序的各个部分中重用。到目前为止,没有运气。

到目前为止,我已经尝试过:

module.exports = class SingleFeed extends Marionette.Module

    @addInitializer((options) =>
        console.log 'initialize'
    )

还有这个:

module.exports = Marionette.Module.extend(

    @addInitializer((options) =>
        console.log 'initialize'
    )

)

希望我可以像这样在我的应用程序中重用这段代码:

HomeFeed = require '../modules/components/feeds/SingleFeed'
hf = new HomeFeed()

app.module('HomeFeed', 
     moduleClass: hf
).start(options)

有人用coffeescript成功地做到了这一点吗?或者有没有人有任何可能有帮助的想法?

这是我引用的文档:https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.application.module.md

【问题讨论】:

  • 您的尝试不起作用的原因与 CoffeeScript 无关:正如@dmytro-yarmak 在他的回答中解释的那样,这更像是您在错误的时间做正确的事情。要扩展一个 CS 类或木偶模块,您需要提供一个扩展对象;相反,您将调用成员函数的结果传递给它。更糟糕的是,还没有实例(您正在定义一个类),所以调用 @addInitializer 没有意义。

标签: javascript backbone.js coffeescript marionette commonjs


【解决方案1】:

addInitializer 的问题是模块实例的方法但是当你扩展时你不能调用它。但是您可以覆盖空的默认 initialize,您可以在其中添加初始化器和终结器,如下所示:

module.exports = Marionette.Module.extend(
  initialize: () ->
    console.log('initialize module')
    @addInitializer((options) =>
        console.log 'starting module'
    )

)

【讨论】:

  • 另外,如果您要覆盖 非空 initialize 方法,您可以在新的初始化方法中执行 ParentClass.prototype.initialize.call(this, arg1, arg2, ...)
猜你喜欢
  • 2017-06-21
  • 2016-06-23
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2011-06-04
相关资源
最近更新 更多