Как я могу написать это в CoffeeScript? - PullRequest
1 голос
/ 24 декабря 2011

Я пытаюсь договориться с CoffeeScript после вчерашнего ознакомления с LESS css, это меня очень впечатлило.

Я в большей степени волшебник jQuery, чем Raw Javascript, поэтому я нахожу его немного запутанным, но в то же время я думаю, что изучение CoffeeScript - это хорошо, так как это поможет мне лучше понять анализируя вывод. 1003 *

var Raw = (function($) {

    $(function() {
        Raw.initialize();
    });

    return {
        _current: '',
        initialize: function() {
            this.initGlobal();
            if(this.is('index')) {
                this.initIndex();
            }
            else if(this.is('single')) {
                this.initSingle();
            }
        },
        initGlobal: function() {
            atom_twitter();
            atom_loading();
            ratings();
        },
        initIndex: function() {
            atom_scroll();
        },
        initSingle: function() {
            atom_download();
        },
        is: function(page) {
            if(this._current == '') {
                this._current = $('body').attr('id');
            }
            return this._current == page;
        }

    };

})(jQuery);

Есть идеи, с чего начать?

Пока у меня есть это:

Raw = (($) ->
  console.log 'hello world'
)(jQuery);

Какие выходы:

(function() {
  var raw;

  raw = (function($) {
    return console.log('hello world');
  })(jQuery);

}).call(this);

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Вот как бы я это сделал:

raw = do ($ = jQuery) ->
  $ raw.initialize
  {
    _current: ''
    initialize: ->
      @initGlobal()
      if @is 'index'
        @initIndex() 
      else if @is 'single'
        @initSingle()
    # and the rest...
  }

Обратите внимание, что может быть проблема с кодом, который вы пытаетесь портировать: функция, переданная в $, будет запущена, когда DOM будет готов, или сразу , если DOM уже готов. , Таким образом, если DOM готов к выполнению этого кода, raw.initialize будет вызван до того, как определен raw, что приведет к ошибке.

1 голос
/ 04 января 2012

Вы также можете использовать

Raw = (($) ->
  $ ->
    Raw.initialize()

  _current: ""
  initialize: ->
    @initGlobal()
    if @is("index")
      @initIndex()
    else @initSingle()  if @is("single")

  initGlobal: ->
    atom_twitter()
    atom_loading()
    ratings()

  initIndex: ->
    atom_scroll()

  initSingle: ->
    atom_download()

  is: (page) ->
    @_current = $("body").attr("id")  if @_current is ""
    @_current is page
)(jQuery)

если вы хотите конвертировать js в coffeescript, используйте конвертер js2cofee на http://js2coffee.org/

1 голос
/ 24 декабря 2011

С учетом того, как вы структурировали свой код, это в значительной степени построчное преобразование.Я не стал беспокоиться о конверсии $, но если вы хотите, вы можете просто поставить $ = jQuery сразу после строки do.

Raw = null
do ($ = jQuery) ->

  Raw = 
    _current: ''
    initialize: ->
      @initGlobal()
      if @is 'index'
        @initIndex() 
      else if @is 'single'
        @initSingle()

    initGlobal: ->
      atom_twitter()
      atom_loading()
      ratings()
    initIndex: ->
      atom_scroll()
    initSingle: ->
      atom_download()

    is: (page) ->
      @_current = $('body').attr('id') if @_current == ''
      @_current == page

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