railscast 197: ошибка при попытке добавить поля с помощью JavaScript - PullRequest
3 голосов
/ 11 января 2011

HI,

Я пытался следовать 197: Вложенная модель, часть 2 railscast 197 , но у меня возникает эта ошибка, когда я пытаюсь добавить поле с помощью javascript:

Uncaught SyntaxError: Unexpected token &

Здесь помощник:

  def link_to_add_fields(name, f, association)  
    new_object = f.object.class.reflect_on_association(association).klass.new  
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|  
      render(association.to_s.singularize + "_fields", :f => builder)  
    end  
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))  
  end

И функция javascript:

function add_fields(link, association, content) {  
  var new_id = new Date().getTime();  
  var regexp = new RegExp("new_" + association, "g");  
  $(link).parent().before(content.replace(regexp, new_id));  
}

Вызов на мой взгляд:

- form_for @report do |f|
  %h1= f.label :name 
  %p= f.text_field :name
  - f.fields_for :requests do |builder|
    = render 'request_fields', :f => builder

  %p= link_to_add_fields "Add Request", f, :requests

Вотhtml я получаю:

onclick="add_fields(this, "requests", "<div class=\'fields\'>\n  <h1><label for=\"report_requests_attributes_new_requests_query\">Query<\/label><\/h1>\n  <input id=\"report_requests_attributes_new_requests_query\" name=\"report[requests_attributes][new_requests][query]\" size=\"30\" type=\"text\" />\n  <input id=\"report_requests_attributes_new_requests__destroy\" name=\"report[requests_attributes][new_requests][_destroy]\" type=\"hidden\" value=\"false\" /><a href=\"#\" onclick=\"remove_fields(this); return false;\">remove<\/a>\n  <br>\n<\/div>\n"); return false;"

Я пытался удалить его с помощью CGI.unescapeHTML и получаю следующее:

"add_fields(this, \"requests\", \"<div class='fields'>\n  <h1><label for=\"requests_query\">Query</label></h1>\n  <input id=\"requests_query\" name=\"requests[query]\" size=\"30\" type=\"text\" />\n  <input id=\"requests__destroy\" name=\"requests[_destroy]\" type=\"hidden\" value=\"false\" /><a href=\"#\" onclick=\"remove_fields(this); return false;\">remove</a>\n  <br>\n</div>\n\"); return false;"

Все мне кажется правильным, и я не вижу, где можноэта проблема.Если у кого-то есть идея.

Спасибо,

Алена

Ответы [ 2 ]

2 голосов
/ 13 сентября 2013

Вам необходимо удалить функцию h, которая экранирует HTML.В application_helper.rb:

link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))

должно быть

link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
2 голосов
/ 06 сентября 2011

Используйте raw для правильного выхода из JS в Rails 3 +:

<%= raw(@stuff) %>

Просто убедитесь, что то, что вы избегаете, безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...