Ответ 1
на самом деле не скомпилировал его, но это должно работать
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Я смотрел CoffeeScript, и я не понимаю, как вы напишете такой код. Как он обрабатывает вложенные анонимные функции в своем синтаксисе?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
на самом деле не скомпилировал его, но это должно работать
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Ответ Matt правильный, но здесь альтернативный метод:
В CoffeeScript 1.0 (выпущен через несколько недель после постановки этого вопроса) был введен оператор do
, который запускает функцию, которая сразу же следует за ней. Он в основном используется для записи переменных в циклы, поскольку
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(который передает ссылку на x
в анонимную функцию) ведет себя иначе, чем
for x in arr
setTimeout (-> console.log x), 50
Последний будет просто выводить последнюю запись в arr
несколько раз, поскольку существует только один x
.
В любом случае, вы должны знать do
как способ запуска анонимной функции без дополнительных скобок, хотя ее возможности в отношении передачи аргументов в настоящее время немного ограничены. Я поднял предложение чтобы расширить их.
В настоящее время эквивалент вашего примера кода будет
do ->
$ = jQuery
...
Если мое предложение будет принято, можно будет написать
do ($ = jQuery) ->
...
вместо.
Короткий вариант
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()