代码之家  ›  专栏  ›  技术社区  ›  DL Redden

在不引用值的情况下将对象从rails rjs传递到javascript函数调用?

  •  2
  • DL Redden  · 技术社区  · 15 年前

    在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函数以执行?

    2 回复  |  直到 15 年前
        1
  •  4
  •   ryanb    15 年前

    汤姆在正确的轨道上, << 方法是一种方法,因为它将直接插入任何javascript。你要用它来代替 call .

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

    你也可以用 YAHOO 如tom所示,这一行应该比使用带有javascript标记的分部更有效。

        2
  •  1
  •   tom    15 年前

    您可以使用<<方法来发出原始的javascript:

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