Jestem nowy w CoffeeScript i lubię klasy CoffeeScript, ale nie mogę wypracować, jak je rozszerzyć w jQuery przy użyciu jQuery.prototype.
Dotyczy to części mojej aplikacji, która przechowuje globalne zmienne stanu, więc chcę je wywołać przez $.myThing.myFunction(), a nie zwykłe $.fn.extend / $( ).myThing() sposób rozszerzania.
Mogę sprawić, by działało w ten sposób:
$ = jQuery
$.myThing = $.myThing || {}
$.extend $.myThing, {
myProperty: 0
myFunction: ->
}
Co jest w porządku, ale nie mogę używać go jako klasy, a struktura nie wygląda ładnie w moim pycharmie. (Co, bycie szczerym prawdopodobnie przeszkadza bardziej niż cała klasa…)
Chcę zrobić coś takiego:
$ = jQuery
$.myThing = $.myThing || {}
class myThing
myProperty: 0
myFunction: ->
$.extend $.myThing, myThing()
Ale to nie działa (poza ładnym wyglądem w Pycharm). Czy jest na to lepszy sposób?
2 odpowiedzi
Czy to zadziała dla Ciebie?
class jQuery.myThing
myProperty: 0
myFunction: ->
Kompiluje się do:
jQuery.myThing = (function() {
function myThing() {}
myThing.prototype.myProperty = 0;
myThing.prototype.myFunction = function() {};
return myThing;
})();
Edytuj: $.myThing
jako instancję klasy:
class myThing
myProperty: 0
myFunction: ->
jQuery.myThing = new myThing
Chciałem, aby moja metoda jquery działała jak zwykłe rozszerzenie jQuery — była obiektem jQuery, ze wszystkimi metodami jQuery, takimi jak each, html itd. — ale także posiadała właściwości mojej klasy. Oto moje rozwiązanie:
Object.prototype.extend = (klass)->
for key, value of klass::
@[key] = value
class MyClass
myclassmethod: ->
$.fn.myjqextension = ()->
@extend MyClass
@myclassmethod()
Zobacz: https://github.com/jashkenas/coffee-script/issues/452 a>
http://jimmycuadra.com/posts/coffeescript-classes-under-the-hood
Podobne pytania
Nowe pytania
jquery
jQuery to biblioteka JavaScript, rozważ także dodanie tagu JavaScript. jQuery to popularna biblioteka JavaScript działająca w różnych przeglądarkach, która ułatwia przechodzenie przez Document Object Model (DOM), obsługę zdarzeń, animacje i interakcje AJAX, minimalizując rozbieżności między przeglądarkami. Pytanie oznaczone tagiem jQuery powinno być powiązane z jQuery, więc jQuery powinno być używane przez dany kod i przynajmniej elementy związane z użyciem jQuery muszą znajdować się w pytaniu.