#jquery #ruby-on-rails #ruby #ruby-on-rails-3 #rjs
#jquery #ruby-on-rails #ruby #ruby-on-rails-3 #rjs
Вопрос:
Итак, из этой railscast есть следующий код для динамического добавления поля для формы вложенной модели:
Это было в вспомогательном приложении:
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));
}
Теперь мне любопытно, как бы вы изменили весь этот код, чтобы вы могли полагаться исключительно на jQuery, а не на прототип или rjs.
Ответ №1:
Единственная вещь, связанная с прототипом, здесь — link_to_function
call. Что он делает, так это создает onclick
обработчик над вашим name
текстом, который вызывает вашу add_fields
функцию.
Итак, чтобы быть чистым jquery, вы должны использовать $().click (function (){...})
метод вместо этого. Однако точная реализация будет отличаться в зависимости от того, хотите ли вы вставить javascript в свой html-файл или вызвать его незаметно.