Расширение jQuery с классом CoffeeScript - PullRequest
2 голосов
/ 07 марта 2012

Я новичок в CoffeeScript и мне нравятся классы CoffeeScript, но я не могу понять, как расширить их в jQuery с помощью jQuery.prototype.

Это для части моего приложения, которое содержит сортировку-из глобальных переменных состояния, поэтому я хочу вызывать его через $. myThing.myFunction () , а не обычным способом расширения $ .fn.extend / $ (). myThing ().

Я могу заставить его работать так:

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

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

Это нормально, но тогда я не могу использовать его как класс, и структура не выглядит симпатично, как я.(Что, честно говоря, вероятно, беспокоит больше, чем весь класс ...)

Я хочу сделать что-то вроде этого:

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

class myThing
  myProperty: 0
  myFunction: ->

$.extend $.myThing, myThing()

Но это не работает(кроме того, чтобы выглядеть красиво в пичарме).Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Будет ли это работать для вас?

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
0 голосов
/ 13 сентября 2012

Я хотел, чтобы мой метод 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...