【问题标题】:Extending jQuery with CoffeeScript class用 CoffeeScript 类扩展 jQuery
【发布时间】:2012-09-14 03:13:38
【问题描述】:

我是 CoffeeScript 新手,我喜欢 CoffeeScript 类,但不知道如何使用 jQuery.prototype 在 jQuery 中扩展它们。

这是我的应用程序的一部分,它包含某种全局状态变量,所以我想通过 $.myThing.myFunction() 调用它,而不是通常的 $.fn.extend /$().myThing() 扩展方式。

我可以让它像这样工作:

$ = jQuery
$.myThing = $.myThing || {}

$.extend $.myThing, {
  myProperty: 0
  myFunction: ->
}

这没关系,但是我不能将它用作一个类,并且结构看起来不像我的 pycharm。 (其中,说实话可能比全班更麻烦……)

我想要的是做这样的事情:

$ = jQuery
$.myThing = $.myThing || {}

class myThing
  myProperty: 0
  myFunction: ->

$.extend $.myThing, myThing()

但它不起作用(除了在 pycharm 中看起来很漂亮)。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: jquery coffeescript


    【解决方案1】:

    这对你有用吗?

    class jQuery.myThing
      myProperty: 0
      myFunction: ->
    

    编译为:

    jQuery.myThing = (function() {
    
      function myThing() {}
    
      myThing.prototype.myProperty = 0;
    
      myThing.prototype.myFunction = function() {};
    
      return myThing;
    
    })();
    

    编辑: $.myThing 作为类的实例:

    class myThing
      myProperty: 0
      myFunction: ->
    
    jQuery.myThing = new myThing
    

    【讨论】:

    • 更接近 - 我没有看过类是如何编译的。在这种情况下,$.myThing 返回原型,而不是对象的单个实例,所以我猜我需要在某处添加“新”。
    • 我没有意识到您希望 $.myThing 成为该类的一个实例。请参阅上面的编辑。
    • 我认为我不太了解原型...谢谢。效果很好,甚至在 pycharm 中看起来也不错。看来我也可以“$.extend $.myThing, new myThing()”。
    【解决方案2】:

    我希望我的 jquery 方法能够像常规的 jQuery 扩展一样工作——成为一个 jQuery 对象,具有所有 jQuery 方法,例如 each、html 等——而且还具有我的类的属性。这是我的解决方案:

    Object.prototype.extend = (klass)->
      for key, value of klass::
        @[key] = value
    
    class MyClass
      myclassmethod: ->
    
    $.fn.myjqextension = ()->
      @extend MyClass
      @myclassmethod()
    

    见:https://github.com/jashkenas/coffee-script/issues/452

    http://jimmycuadra.com/posts/coffeescript-classes-under-the-hood

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多