2009-08-01 24 views
2

在Ruby on Rails項目中,我需要在Ajax調用結束時執行JavaScript函數。我的問題是,傳遞到被page.call調用的JavaScript函數的值將被包含在引號中。如果您傳遞字符串,但沒有太多問題,但其中一個值是JavaScript Array的字符串表示形式,即[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不能用引號括被作爲參數數據,或者我應該如何去了解這個數據傳遞給JS函數執行Ajax調用完成後?

回答

4

湯姆是在正確的軌道上,該<<方法是去,因爲這將直接插入任何JavaScript的方式。你會想要使用它,而不是call

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

你可以做同樣的事情與YAHOO線湯姆顯示這應該是比使用局部用JavaScript代碼來更有效率。

1

你可以使用< <方法,而不是發出原始的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不是文件中的部分。 – 2009-08-02 04:03:28

相關問題