0

これが問題です。

私の部分/モーダルのコード_form.html.erb

<div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    <%= f.submit 'Store Ticket', :class => 'btn btn-primary' %>
    <%= f.submit 'Print Ticket', :name =>'Print Ticket ', :class => 'btn btn-primary', :id => 'print', :onclick => "$.print_page(#{@ticket.id});" %>

これは私の関数を呼び出しますtickets.js.erb

$(document).ready(function() {
    $.print_page = function(val) {
        var val,
            left = ($(window).width() / 2) - (900 / 2),
            top  = ($(window).height() / 2) - (600 / 2);

        window.open("tickets/print?id=" + val, null, "height=600,width=800,top=" + top + ",left=" + left + ",status=yes,toolbar=no,menubar=no,location=no");
    };

    $.reprint_page = function(val) {
        var val,
            left = ($(window).width() / 2) - (900 / 2),
            top  = ($(window).height() / 2) - (600 / 2);

        window.open("./print?id=" + val, null, "height=600,width=800,top=" + top + ",left=" + left + ",status=yes,toolbar=no,menubar=no,location=no");
    };
});

次に、これにより /print が開きます。これには、埋め込まれた Java の印刷ボックスがポップアップ表示されます。

問題は、これが開くと、コントローラーがフィールドを保存する前にポップアップするように見えることです。すべてのフィールドが保存されていますが、印刷ウィンドウにはまだ更新前の値が表示されています。

データベースが更新されていることを確認してから、チケットを印刷するページを呼び出す必要がありますか?

私はそれをボールに入れることを考えましif @ticket.saveたが、2回レンダリングできないようです。つまり、フォーカスのあるポップアップでメインアプリ画面にリダイレクトします。

この機能を実装する最善の方法についてのアイデア。現時点では、/print/html.erb に更新された値がある場合もあれば、更新前の値がある場合もあるため、コントローラーで .save が完了する前に起動するのが速すぎると思います。

$.print_page(15)コンソールから呼び出すと、すべてが夢のように機能します。

また、2秒の遅延でラップしようとしましたsetTimeout()が、これは onclick イベントからはまったく起動しませんが、ファイルはコンソールから手動で OK ???

どんな助けでも大歓迎です

4

0 に答える 0