我试图在昨天查看LESS css之后与CoffeeScript达成协议,我对此印象非常深刻。
我更像是一个jQuery wiz而不是Raw Javascript,所以我觉得它有点令人困惑,但与此同时我觉得调查CoffeeScript很好,因为它可以帮助我通过分析输出来更好地理解。 / p>
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);
答案 0 :(得分:2)
我是这样做的:
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 :(得分:1)
通过您构建代码的方式,它几乎是逐行转换。我没有打扰$转换,但如果你想要,你只需将$ = 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()
答案 2 :(得分:1)
您也可以使用
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,请使用http://js2coffee.org/上的js2cofee转换器