在RubyonRails项目中,我需要在Ajax调用结束时执行一个javascript函数。我的问题是,通过page.call调用的javascript函数中传递的值被括在引号中。如果传递的是字符串,则不会有太多问题,但其中一个值是JavaScript数组的字符串表示形式,即[0,1,2,3]。
以下是我认为重要的代码片段。
我有一个观察字段,用于观察选择下拉列表。
<%= observe_field("project_select_list",
:loading => "Element.show('tree_indicator')",
:complete => "Element.hide('tree_indicator')",
:url => {:controller => "projects", :action => "change_project"},
:with => "id")
%>
在项目控制器中
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函数以执行?