在 Ruby on Rails 项目中,我需要在 Ajax 调用结束时执行一个 JavaScript 函数。我的问题是传递给使用 page.call 调用的 JavaScript 函数的值被用引号括起来。如果您传入字符串,但其中一个值是 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 函数,但这似乎是一个 hack。
如何使 page.call 不将作为参数发送的数据包装在引号中,或者我应该如何在 Ajax 调用完成后将此数据传递给 JS 函数以执行?