Моя цель: изучить CoffeeScript, перенеся виджет jquery в coffescript.
После превосходного введения в виджет jQuery я перенес пример кода на CoffeeScript: http://bililite.com/blog/understanding-jquery-ui-widgets-a-tutorial/
из:
var Green5 = {
getLevel: function () { return this.options.level; },
setLevel: function (x) {
var greenlevels = this.options.greenlevels;
var level = Math.floor(Math.min(greenlevels.length-1, Math.max(0,x)));
this.options.level = level;
this.element.css({background: greenlevels[level]});
this._trigger('change', 0, level);
},
_init: function() { this.setLevel(this.getLevel()); }, // grab the default value and use it
darker: function() { this.setLevel(this.getLevel()-1); },
lighter: function() { this.setLevel(this.getLevel()+1); },
off: function() {
this.element.css({background: 'none'});
this._trigger('done');
this.destroy(); // use the predefined function
},
options: {
level: 15,
greenlevels: ['#000','#010','#020','#030','#040','#050','#060','#070','#080','#090','#0a0','#0b0','#0c0','#0d0','#0e0','#0f0', '#fff']
}
};
$.widget("ui.green5", Green5);
to:
Green5 =
getLevel: -> @options.level
setLevel: (x) ->
greenlevels = @options.greenlevels;
level = Math.floor(Math.min(greenlevels.length-1, Math.max(0,x)));
@options.level = level;
@element.css({background: greenlevels[level]});
@_trigger('change', 0, level);
_init: -> @setLevel(@getLevel()) # grab the default value and use it
darker: -> @setLevel(@getLevel()-1)
lighter: -> @setLevel(@getLevel()+1)
off: ->
@element.css({background: 'none'})
@_trigger('done')
@destroy() # use the predefined function
options: {
level: 15,
greenlevels:['#000','#010','#020','#030','#040','#050','#060','#070','#080','#090','#0a0','#0b0','#0c0','#0d0','#0e0','#0f0', '#fff']
}
$.widget("ui.green5", Green5);
Это прекрасно работает, но портировать было так легко, что у меня появилось ощущение, что я еще не получил CoffeeScript.Как бы вы улучшили этот код?
обновление (спасибо Билли!):
Green5 =
getLevel: -> @options.level
setLevel: (x) ->
greenlevels = @options.greenlevels
level = Math.floor(Math.min(greenlevels.length-1, Math.max(0,x)));
@options.level = level;
@element.css
background: greenlevels[level]
@_trigger('change', 0, level)
_init: -> @setLevel @getLevel() # grab the default value and use it
darker: -> @setLevel @getLevel() - 1
lighter: -> @setLevel @getLevel() + 1
off: ->
@element.css
background: 'none'
@_trigger 'done'
@destroy() # use the predefined function
options: {
level: 15,
greenlevels:['#000','#010','#020','#030','#040','#050','#060','#070','#080','#090','#0a0','#0b0','#0c0','#0d0','#0e0','#0f0', '#fff']
}
$.widget "ui.green5", Green5