如何从相同对象上的另一个mixin调用在一个CoffeeScript mixin中定义的方法?
How can I call a method defined in one CoffeeScript mixin from another mixin on the same object?
我有一个包含两个mixins的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()
但是我不能,因为这会抛出一个异常。维度不是函数
如何来吗?
另外,如果我不将我的mixin与window.
定义为前缀,我似乎不能将其用作mixin -解决这个问题的最佳方法是什么?
虽然这并没有直接回答您的问题,但我相信它将为您提供一个解决潜在问题的工具。我最近遇到了一种情况,我必须创建几个类,每个类都继承自google maps构造函数。但是为了DRY我自己的代码,我希望所有这些类也从抽象基类继承它们的公共功能。以下是我想到的(例如简化):
mixin = (obj, mixes...) ->
mixes.forEach (mix) ->
Object.keys(mix).forEach (key) -> obj[key] = mix[key]
return obj
class MyBaseClass
constructor: () ->
#init some vars
method1: () -> #do stuff
method2: () -> #do stuff
class Signal extends google.maps.Marker
constructor: () ->
super() #adds google maps goodness
MyBaseClass.apply(this, arguments) #inits the vars
@type = 'signal'
signalMethod1: () -> #do stuff
#add base class methods. Messing directly with class prototypes is considered by
#some to be something of an antipattern in coffeescript, but it achieves the
#desired effect here.
mixin Signal.prototype, MyBaseClass.prototype
你可能不得不在每个派生类的构造函数中调整应用程序的顺序(调用super是在应用MyBaseClass构造函数之前还是之后?)那么其他构造函数表达式呢?),但支持多重继承。多重继承通常带来的麻烦大于它的价值,但有时却是最好的解决方案。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- 使用jade.compile编译一个jade模板,该模板是一个mixin文件或包含部分
- this.mixIn 不是一个函数
- 在一个单独的文件中导出React mixin
- 如何从相同对象上的另一个mixin调用在一个CoffeeScript mixin中定义的方法?
- 我可以给一个变量与多个参数的Jade mixin
- 为transform: rotate创建一个跨浏览器mixin