Частичное Rails получает двойной экранирование при использовании link_to_function - PullRequest
2 голосов
/ 22 апреля 2010

У меня есть следующий код.

   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 ]

1 голос
/ 23 апреля 2010

Это HAML?

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

Если это так, вам нужно предотвратить выход HAML из вашего вывода:

!=add_skill_link("Add Skill", form, "resume_#{id}_skills")
0 голосов
/ 25 апреля 2010

Я заметил, что все становится слишком запутанным, наконец-то я получил свое решение из примера приложения Райана Бейтса, у него есть Railscast о вложенных моделях, и там я просмотрел ветви и получил ветку с хорошим чистым решением этой проблемы. текст ссылки

...