如何使用jQuery / Coffeescript访问父类

时间:2013-11-11 20:48:45

标签: jquery coffeescript

情况:

我有一个名为DrawLogic的类,看起来像(在coffeescript中):

 class DrawLogic
    mark: => 
        do something
    etc ....

 @DrawLogic = new DrawLogic 

稍后在HTML页面中创建“dynmical constans”,即来自服务器程序的名称我想使用/ type /只有一次

<script>
DrawLogic.NameSpaceName='orion42'; 
.... 
</script> 

到目前为止一直很好,并且正在工作

现在为我的(svg)元素扩展jQuery(在我的类DrawLogic中)

class DrawLogic 
   ....
   init: ->
      jQuery.fn.td_data = (attr_name) ->  #look at the '->'
          do something with 'this' 
           #the element of selector works fine     
           #to use the "DrawLogic.NameSpaceName" pseudo constant
           #i have to write:

          window.DrawLogic.NameSpaceName #was orion42 before

   etc...

我在“DrawLogic类”中,如果我使用'=&gt;'我在类范围内,或者这个或(@)对this.NameSpaceName(而不是window.DrawLogic.NameSpaceName)罚款,但我松开了选择器的“元素”。

那怎么样?有没有比使用“window.DrawLogic.NameSpaceName”更好的引用我内部类的解决方案?我不想重复我的自我......

要说清楚,我需要输入“DrawLogic”只有4次(coffescript中有3次,HTML中有一次,但现在我必须在jQuery extendet函数中使用它与每个引用: - (

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

当你说你在DrawLogic里面时,你并不完全正确:

class DrawLogic 
    init: ->
        jQuery.fn.td_data = (attr_name) ->
            # Here you're not really inside DrawLogic anymore.

td_data里面,无论调用者说你在里面,你都真的在里面,这是标准的JavaScript行为。以上相当于:

f = (attr_name) -> #...
class DrawLogic
    init: -> jQuery.fn.td_data = f

除非init使用td_data内的局部变量。

如果window.DrawLogic.NameSpaceName过多,那么您应该可以使用DrawLogic.NameSpaceName或使用闭包:

class DrawLogic
    init: ->
        DL = @constructor
        jQuery.fn.td_data = (attr_name) ->
            # Use DL.NameSpaceName in here