2010-10-30 1 views
0

У меня есть форма страницы, где я хочу, чтобы пользователь добавил вложенные формы, нажав на удаленную ссылку («добавить фотографию», f. Ex). После нажатия кнопки я вставляю вложенные формы с помощью RJS. Инъекционные формы - это удаленные формы, но после инъекции формы не имеют прикрепленных javascript-событий, поэтому они просто передают с помощью http контроллеру вложенного объекта. Кроме того, все работает нормально.Добавление обработчиков javascript в удаленный объект формы после инъекции с помощью RJS

Мой вопрос:

Можно ли вызвать повторную проверку JavaScript удаленных форм через RJS, после инъекции ??

Таким образом, мои вложенные формы получат правильную обработку событий javascript и отправят с помощью AJAX.

Моя страница форма (_form.html.erb):

<% javascript 'ckeditor/ckeditor' %> 

<%= form_for @page, :html => { :multipart => true } do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :active %><br /> 
    <%= f.check_box :active %> 
    </p> 
    <p> 
    <%= f.label :homepage %><br /> 
    <%= f.check_box :homepage %> 
    </p> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description, :rows => 5, :cols => 80 %> 
    </p> 
    <p> 
    <%= f.label :text %><br /> 
    <%= f.text_area :text, :class => 'html' %> 
    </p> 
    <p> 
    <%= f.label :picture_class %><br /> 
    <%= f.select :picture_class, ['left','right','full'] %> 
    </p> 

<% unless @page.new_record? %> 
    <h2>Photos</h2> 
    <%= link_to 'Add photo', add_photo_page_url(@page), :remote => true %> 
    <div id="photos"> 
    <%= render :partial => 'shared/forms/photo', :collection => @page.photos %> 
    </div> 
    <h2>Snippets</h2> 
    <%= link_to 'Add snippet', add_snippet_page_url(@page), :remote => true %> 
    <div id="snippets"> 
    <%= render :partial => 'shared/forms/photo', :collection => @page.snippets %> 
    </div> 
    <h2>Downloads</h2> 
    <%= link_to 'Add download', add_download_page_url(@page), :remote => true %> 
    <div id="downloads"> 
    <%= render :partial => 'shared/forms/download', :collection => @page.downloads %> 
    </div> 
    <h2>Paragraphs</h2> 
    <%= link_to 'Add paragraph', add_paragraph_page_url(@page), :remote => true %> 
    <div id="paragraphs"> 
    <%= render :partial => 'shared/forms/paragraph', :collection => @page.paragraphs %> 
    </div> 
<% end %> 

    <p><%= f.submit %></p> 
<% end %> 

<%= javascript_tag 'CKEDITOR.replaceAll("html");' %> 

Controller код для создания вложенного объекта Фото: (page_controller.rb):

def add_photo 
    @page = Page.find(params[:id]) 
    @photo = @page.photos.build 
end 

Rjs код, который получает выполняемую нажав на ссылку 'добавить фотографию' (add_photo.js.rjs):

page.insert_html :bottom, :photos, :partial => 'shared/forms/photo', :object => @photo 
page.visual_effect :highlight, :photos, :duration => 2 

частичная/форма, которая получает инъекцию RJS (_photo.html.erb) :

<%= form_for [@page, photo], :remote => true do |f| %> 
<p> 
    <%= f.check_box :active %> 
    <%= f.text_field :name %> 
    <%= f.file_field :photo %> 
    <%= f.submit 'Save' %> 
</p> 
<% end %> 

Любая помощь будет принята с благодарностью. Я хотел бы решить эту проблему с помощью вложенных форм (не вложенных атрибутов) и RJS, но не смог выполнить мой путь к документации по этому вопросу.

Спасибо!

- Якоб

ответ

0

Если вы хотите придерживаться RJS, вы должны смотреть на встроенный JavaScript, чтобы видеть, как они все регистрации. Вероятно, они просто делают это на DOM и привязаны к событию submit(). Скорее всего, он заключен в метод, который ищет что-либо помеченное: remote => true и привязывается к событию submit(), поэтому он будет отправляться через AJAX. Вы можете выполнить ту же логику, но изолировать ее в своей новой форме. Поэтому, возможно, ваш частичный может иметь тег JavaScript, который выполняет эту логику для этой формы на основе идентификатора или на основе имени класса, игнорируя все, кроме последней добавленной формы.

 Смежные вопросы

  • Нет связанных вопросов^_^