使用link_to_function时,Rails部分会被双重转义

时间:2010-04-22 10:35:24

标签: javascript ruby-on-rails prototype

我有以下代码。

   def add_resume_link(name, form)
     link_to_function name do |page|
       html = form.fields_for :resumes, @general_resume.resumes.build, :child_index => 'NEW_RECORD' do |form_parent|
               render :partial => 'resume_form', :locals=>{:form=>form_parent} 
            end
       page << "$('resumes').insert({ bottom: '#{escape_javascript(html)}'.replace(/NEW_RECORD/g, id) });"
      end
    end

resume_form我有一个地方:

 =add_skill_link("Add Skill", form, "resume_#{id}_skills")

,功能如下:

  def add_skill_link(name, form, id)
    link_to_function name do |page|
      html = form.fields_for :skill_items, @general_resume.skill_items.build, :child_index => 'NEW_RECORD' do |form_parent|
        render :partial=>'skill_form', :locals=>{:form=>form_parent, :parent=>id}
      end
      page << "$('#{id}').insert({ bottom: '#{escape_javascript(html)}'.replace(/NEW_RECORD/g, new Date().getTime()) });"
    end
  end

所以基本上我有一个javascript代码,动态添加一段html(add_resume)并包含另一个javascript代码,动态地向页面添加一个选择框。

我的问题是如果我从服务器端使用add_skill_link工作正常,我的意思是从服务器端渲染。并且在上述方式中使用时会被双重转义。

我尝试从escape_javascript位移除add_skill_link仍然不好。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是HAML吗?

=add_skill_link("Add Skill", form, "resume_#{id}_skills")

如果是这样,您需要阻止HAML转义输出:

!=add_skill_link("Add Skill", form, "resume_#{id}_skills")

答案 1 :(得分:0)

我发现事情变得太乱了,最后我从Ryan Bates示例应用程序得到了我的解决方案,他有一个关于嵌套模型的railscast,在那里我浏览了分支,我得到了一个分支,有一个很好的干净解决方案来解决这个问题。 link text