【发布时间】:2015-10-10 21:31:30
【问题描述】:
我有一个包含两个 mixin 的 CoffeeScript 对象:
namespace 'S.Graphs', (exports) ->
class exports.DocketEvents extends Module
@extend Scatter
@extend Axis
name: 'DocketEvent'
constructor: ({@litigation}) ->
console.log("Building view of docket events for #{@litigation.name}")
如何从另一个 mixin 中调用定义在一个 mixin 中的方法?我希望如果我在一个 mixin 中定义了一个方法,我可以从另一个 mixin 中调用它:
window.Scatter =
extended: ->
@include
dimensions: ->
Justly.view.dimensions()
但我不能,因为这会引发 this.dimensions 不是函数的异常。
怎么会?
另外,如果我没有以 window. 作为前缀定义我的 mixin,我似乎无法将它用作 mixin - 解决这个问题的最佳方法是什么?
【问题讨论】:
-
你需要
window.前缀的原因是,coffeescript 将每个文件包装在 IIFE 中。您要么需要通过模块系统导出类,要么将其附加到全局对象。 -
关于从同一个对象上的另一个 mixin 调用一个 mixin 的方法有什么想法吗?
-
很难说没有比您发布的更多代码了。通常,如果我在做一个 mixin,我会使用一个类似
mixin = (obj, mixes...) -> mixes.forEach((mix) -> Object.keys(mix).forEach((key) -> obj[key] = mix[key])); return obj的辅助函数。然后我只是用类原型作为第一个值和 mixin 对象作为第二个值来调用它。如果 mixins 是函数而不是对象,我会使用OtherConstructor.apply(SomeClass.prototype, args)
标签: javascript coffeescript mixins