0

Gruffを介して生成したグラフで更新したいdivタグがビューにあります。

私は最後にこれを行う次のコントローラーアクションを持っています

send_data g.to_blob, :disposition=>'inline', :type=>'image/png', :filename=>'top_n.pdf'

このアクションを直接呼び出すと、グラフが表示されます。(必要に応じて、詳細はこちらをご覧ください。)

特定の入力を渡すAJAXを介して上記のアクションを呼び出すを追加するlink_to_remote_tagと、このグラフが生成され、プレースホルダーのdivタグが更新されます...ぎこちないことがわかります。

g.write(filename.png)実行時にビューのdivタグ内にグラフを埋め込むにはどうすればよいですか?

4

2 に答える 2

1

link_to_remote タグで :complete を次のように設定するだけです:

:complete => "updateImg(id_of_div, request.responseText)"

そして、JS 関数を書きます。

function updateImg(id, img)
{
  $(id).innerHTML = '<img src="' + img + '" />';
}

id_of_div は、画像を表示する場合の div の ID です。

request.responseText 変数は、AJAX 呼び出しの要求から取得されます。つまり、コードがグラフを含む png ファイルを書き込むときに、この新しい png へのパスを返すメソッドを終了します (render :text => path_to_new_image ); 次に、このリクエスト変数を :complete で使用します。

于 2008-12-01T17:29:55.113 に答える
0

通常のimgタグを使用して、生成されたpngを返すコントローラーアクションを呼び出すことができます。次のようなrespond_toを使用するようにコントローラーを設定した場合:

def graph
    # get the relevant data for 'g' here
    respond_to do |format|
        format.html #uses the default view if relevant (good for debugging)
        format.png do 
            send_data g.to_blob, 
                :disposition=>'inline', 
                :type=>'image/png', 
                :filename=>'top_n.pdf' 
        end
    end
end

次のようなジェネレーターの通常のURLもあります。

<img src="controller/graph.png" alt="Something"/>

イメージの生成が失敗する可能性がある場合は、フォールバックイメージをサーバーに保存し、そのファイルを読み取って返すことができます。

生成が非常に多く、常に変更される可能性が低い場合は、結果のファイルをキャッシュして、データが変更されていないと判断した場合は代わりにそれを取得します。ARemesalが提案する方法を使用して、画像が生成されるまで画像リンクの追加を遅らせてから、キャッシュされたファイルに直接リンクすることができます。(それはあなたの特定のケースに応じて何が最善かによって異なります)

于 2008-12-01T17:44:53.977 に答える