2

Ruby on Railsプロジェクトでは、Ajax呼び出しの最後にJavaScript関数を実行する必要があります。私の問題は、page.callで呼び出されるJavaScript関数に渡される値が引用符で囲まれていることです。文字列を渡す場合はそれほど問題にはなりませんが、値の1つはJavaScript配列の文字列表現、つまり[0,1,2,3]です。

これが私が感じる重要なコードスニペットです。

選択ドロップダウンリストを監視するobserve_fieldがあります。

<%= observe_field("project_select_list",
    :loading => "Element.show('tree_indicator')",
    :complete => "Element.hide('tree_indicator')",
    :url => {:controller => "projects", :action => "change_project"},
    :with => "id")
%>

project_controllerで

def change_project()
    @current_project = Project.find(params[:id])
end

そしてchange_project.rjsで

page.replace_html("project_name", @current_project.name)
page.visual_effect(:highlight, "project_name")
page.call("buildYUITreeView", "project_tree", @current_project.get_directory_contents(@current_project.local_path, 0))

最後の値:

@current_project.get_directory_contents(@current_project.local_path, 0))

私に問題を引き起こしているものです。[0,1,2,3]などの値を送信したいのですが、「[0,1,2,3]」を送信しているため、JSが爆発します。

このパーシャルは、ページに配置されるJavaScriptコードに文字列ではなくデータを送信するという点で、想定されていることを実行します。

<% javascript_tag do -%>
    YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("<%= tree_id %>", <%= project.get_directory_contents(project.local_path, 0) %>));
<% end -%>

これを念頭に置いて、パーシャルを使用して、必要なときにJS関数を呼び出すためにレンダリングするだけで遊んでいますが、それはそのようなハックのようです。

page.callでパラメーターとして送信されたデータを引用符で囲まないようにするにはどうすればよいですか、またはAjax呼び出しの完了後にこのデータをJS関数に渡して実行するにはどうすればよいですか?

4

2 に答える 2

4

トムは正しい<<方向に進んでいました。JavaScriptを直接挿入するので、この方法が最適です。の代わりにそれを使用することをお勧めしますcall

page << "buildUYITreeView('project_tree', #{@current_project.get_directory_contents(@current_project.local_path, 0))})"

tomが示した行で同じことを行うことができますYAHOO。これは、javascriptタグでパーシャルを使用するよりも効率的です。

于 2009-08-03T15:56:10.013 に答える
1

代わりに<<メソッドを使用して、生のjavascriptを出力できます。

page << 'YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("project_tree", '+@current_project.get_directory_contents(@current_project.local_path, 0)+'))'
于 2009-08-02T03:47:54.783 に答える