I've been looking at CoffeeScript and I'm not understanding how you would write code like this. How does it handle nested anonymous functions in its syntax?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
didn't actually compile it, but this should work
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Matt's answer is correct, but here's an alternative method:
In CoffeeScript 1.0 (released a few weeks after this question was posed), a do
operator was introduced that runs the function that immediately follows it. It's mostly used for capturing variables in loops, since
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(which passes a reference to x
into the anonymous function) behaves differently than
for x in arr
setTimeout (-> console.log x), 50
The latter will simply output the last entry in arr
repeatedly, since there's only one x
.
Anyway, you should be aware of do
as a way of running an anonymous function without the extra parentheses, though its capabilities with respect to argument-passing are a bit limited at the moment. I've raised a proposal to broaden them .
Currently, the equivalent of your code example would be
do ->
$ = jQuery
...
If my proposal is accepted, it will be possible to write
do ($ = jQuery) ->
...
instead.
Short variant
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.