rails 2 replace_html将javascript放入页面

时间:2011-01-10 00:56:25

标签: ruby-on-rails ajax prototypejs rjs

在我的控制器中我有:

  respond_to do |format|
    format.js
  end

在我的rjs中:

page.replace_html("source_credential_list", :partial => "source_credential_list", :object => @all_source_credentials) 

page.replace("source_credential_list", :partial => "source_credential_list", :object => @all_source_credentials) 

在我的部分:(

<% fields_for(@brand_report_source_credential_key) do |ff|  %>
   <%= ff.select :source_credential_id , options_from_collection_for_select(@all_source_credentials,'id','credential_display_name')%>
<% end %>

在我的原创视图中:

  <span id="source_credential_list">
    <%= render :partial => 'source_credential_list' %>
  </span>

当我更换它时效果很好,但只有一次,第二次我得到一个null的警报,我怀疑是因为跨度消失了。如果我做replace_html,它有点工作,它会更新跨度,但它会将实际的rjs / javascript放入包含新选择/下拉的范围内。所以像这样:

来源凭据 尝试{Element.update(“source_credential_list”,“\ n \ n \ n”); } catch(e){alert('RJS error:\ n \ n'+ e.toString()); alert('Element.update(\“source_credential_list \”,\“\ n \ n \ n \”);');扔e}

我尝试将跨度移动到部分并进行两个组合,但没有任何效果。我确定它显而易见......

1 个答案:

答案 0 :(得分:1)

我不确定触发此操作的代码是什么,但假设它是由link_to_remote调用触发的,请确保您没有:update =&gt; link_to_remote调用中的“source_credential_list”参数 - 否则它将执行RJS并更新使用javascript代码指定的元素。

见这里:http://railsforum.com/viewtopic.php?pid=44191#p44191

此外,当你执行page.replace时,它只能运行一次,因为page.replace会替换指定的元素包括周围的标记,所以除非你指定的部分包含span标记,否则它'' ll第一次使用时会消失。