2012-03-07 13 views
2

私はCoffeeScriptを初めて使いました。CoffeeScriptクラスは気に入っていますが、jQuery.prototypeを使用してjQueryでそれらを拡張する方法を考えることはできません。CoffeeScriptクラスでjQueryを拡張する

通常の$ .fn.extend/$(これはソートのグローバル状態変数を保持している私のアプリの一部ですので、私は$ .myThing.myFunction(経由で呼びたい)、そしてません) .myThing()メソッドを継承します。大丈夫です

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

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

を、その後私はクラスとして使用することはできませんし、構造はかなり私のpycharmを見ていない:

私はそれがこのように動作するように取得することができます。

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

class myThing 
    myProperty: 0 
    myFunction: -> 

$.extend $.myThing, myThing() 

しかし、それは見ているよりも、(他に動作しません:

は私がしたい、このような何かを行うことです(どちらが、正直おそらく...全クラスのものよりも多くを悩ませています)ピカールでかなり)。これを行うより良い方法はありますか?

答えて

2

これはあなたのために働くでしょうか?

class jQuery.myThing 
    myProperty: 0 
    myFunction: -> 

にコンパイル:私は私のjqueryの方法は、通常のjQueryの延長のように行動したい

class myThing 
    myProperty: 0 
    myFunction: -> 

jQuery.myThing = new myThing 
+0

クローサー - 私はクラスがコンパイルされたかを見ていませんでした。この場合、$ .myThingはオブジェクトの1つのインスタンスではなくプロトタイプを返しますので、どこかに "new"を追加する必要があります。 –

+0

'$ .myThing'をクラスのインスタンスにしたかったとは思いませんでした。上記の編集を参照してください。 –

+0

私はプロトタイプをよく理解したとは思わない...ありがとう。それは完璧に動作し、pycharmでもうまく見えます。 "$ .extend $ .myThing、new myThing()"を実行することもできます。 –

0

- :

jQuery.myThing = (function() { 

    function myThing() {} 

    myThing.prototype.myProperty = 0; 

    myThing.prototype.myFunction = function() {}; 

    return myThing; 

})(); 

編集:クラスのインスタンスとして$.myThing jQueryオブジェクトであり、それぞれ、htmlなどのすべてのjQueryメソッドがありますが、自分のクラスのプロパティを持つこともできます。ここに私のソリューションです:

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