1

現在のページをリロードする前に、未保存のメールがある場合は使用を促すようにしています。保存されていない電子メールは、unsaved というハッシュに保存されます。スクリプトは CoffeeScript で書きました。

このコードを使用すると

  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?

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 が関数ではなく文字列を返すようにするにはどうすればよいですか?

4

1 に答える 1

1

これは実際には CoffeeScript とは関係ありません。このプロパティwindow.onbeforeunloadは、関数からの文字列または void の戻り値を想定していますが、unsaved.count <= 0それ以外の値を返す場合:

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

戻り値は非 void であるため、submit関数を文字列にキャストしようとします。正直なところ、CoffeeScript がその部分を生成した理由はわかりません。元のスクリプトには表示されていないように見えるからです。

voidとはいえ、ダイアログを表示したくない場合は、戻る必要があります。

if (unsaved.count > 0) {
    return 'your emails are not saved.';
} else if (window.onbeforeunload) {
    $("form.edit_email_template").first().submit();
}
于 2013-02-14T06:14:29.167 に答える