2009-08-01 6 views
2

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

ここで私はコードの重要なスニペットだと感じているものです。

私は、選択ドロップダウンリストを監視する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

トムは正しい軌道に乗っていた、<<方法は、移動するための方法です。あなたはcallの代わりにそれを使いたいでしょう。トムはJavaScriptのタグを部分的に使用するよりも効率的であるべきであったとして

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

あなたはYAHOOラインで同じことを行うことができます。

1

あなたは生のjavascriptを放出する代わりに< <メソッドを使用することができます。それは、直接任意のJavaScriptを挿入しますので、

page << 'YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("project_tree", '[email protected]_project.get_directory_contents(@current_project.local_path, 0)+'))' 
+0

回答ありがとうございます。私はあなたが正しい質問に答えなかったと思います。私の問題はpage.call( "buildYUITreeView"、 "project_tree"、@ current_project.get_directory_contents(@ current_project.local_path、0)) 部分的ではないRJSファイルでの呼び出しです。 –

+0

申し訳ありませんが、私は十分に近く読まなかった。答えを編集する。 – tom

関連する問題