2013-02-14 3 views
1

Я пытаюсь запросить использование, если у них есть несохраненные электронные письма, прежде чем перезагрузить текущую страницу. Несохраненные письма хранятся в хеше, называемом несохраненным. Я написал сценарии в CoffeeScript.CoffeeScript onbeforeunload отвечает функцией not string

Если я использую этот код

window.onbeforeunload =() -> 
    return "Your emails are not saved. Click \"Save Email\" on any email to save them all. If you would like to discard your emails, just leave this page" if unsaved.count > 0 

Вместо того, что побудило меня с сообщением я получаю:

function (data, fn) { 
     return arguments.length > 0 ? 
      this.on(name, null, data, fn) : 
      this.trigger(name); 
    } 

Are you sure you want to reload this page? 

The CoffeeScript переводится как:

window.onbeforeunload = function() { 
    if (unsaved.count > 0) { 
    return "Your emails are not saved. Click \"Save Email\" on any email to save them all. If you would like to discard your emails, just leave this page"; 
    } 
}; 

Как я должен идти о том, как заставить CoffeeScript возвращать строку, а не функцию?

+1

Там что-то еще происходит, нет ничего в CoffeeScript, что бы произвести ваш 'вернуть $ (" форму. .. edit_email_template ") первый() представляет;'. Взгляните на [упрощенную версию] (http://coffeescript.org/#try:count%20%3D%2010%0Awindow.onbeforeunload%20%3D%20()% 20-% 3E% 0A% 20% 20% 20% 20return% 20% 22Pancakes% 22% 20if% 20count% 20% 3E% 200). –

ответ

1

Это не совсем связанный с CoffeeScript. Свойство window.onbeforeunload ожидает строку или пустое возвращаемое значение из вашей функции, но если unsaved.count <= 0 вы возвращение что-то другое:

return $("form.edit_email_template").first().submit; 

Поскольку возвращаемое значение не является недействительным, он будет пытаться бросить функцию submit в строка. Честно говоря, я не уверен, почему CoffeeScript сгенерировал эту часть, потому что она не появляется в исходном скрипте.

Это говорит, вы должны вернуть void, если вы не хотите, чтобы увидеть диалоговое окно:

if (unsaved.count > 0) { 
    return 'your emails are not saved.'; 
} else if (window.onbeforeunload) { 
    $("form.edit_email_template").first().submit(); 
} 
+1

@muistooshort Мой мозг должен иметь короткое замыкание, вы абсолютно правы :) –

+0

+1 Я почти рассмеялся вслух на общественном транспорте из-за этого комментария ^^ Кстати, это урахара? – C5H8NNaO4

Смежные вопросы