2010-10-30 47 views
0

我有一個頁面窗體,我希望用戶通過單擊遠程鏈接('添加照片',f。ex)來添加嵌套窗體。點擊按鈕後,我用RJS注入嵌套表單。注入的表單是遠程表單,但注入後表單沒有附加JavaScript事件,所以他們只需使用http提交給嵌套對象的控制器。除此之外,一切工作正常。在注入RJS後向遠程窗體對象添加javascript處理程序

我的問題是:

是否有可能觸發通過RJS遠程形式的JavaScript的重新確認,注射後?

這樣我的嵌套窗體將得到正確的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");' %> 

控制器代碼來構建嵌套照片對象:(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標籤,它根據id或基於類名執行該表單的邏輯,忽略除最近添加的表單之外的所有內容。

相關問題