В проекте Ruby on Rails мне нужно иметь функцию JavaScript, выполняемую в конце вызова Ajax. Моя проблема в том, что значения, передаваемые в функцию JavaScript, вызываемую с помощью page.call, заключаются в кавычки. Не слишком большая проблема, если вы передаете строки, но одним из значений является строковое представление массива 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 не заключал в кавычки данные, отправленные в качестве параметров, или как мне передать эти данные в функцию JS для выполнения после завершения вызова Ajax?