簡體   English   中英

使用ujs渲染部分,並且在rails 3上沒有AJAX調用

[英]render partial using ujs and without AJAX call on rails 3

我需要使用嵌套表單和jQuery進行多個文件上傳。 所以我寫了一個使用link_to_function方法的助手:

  def add_document_link(title, form)
    link_to_function title do |page|
      form.fields_for :documents, Document.new, :child_index => Time.now.to_i do |f|
        page << "$('#documents').append('#{escape_javascript(render('/realties/document', :f => f))}');"
      end
    end
  end

此代碼僅創建一個鏈接,如果按下該鏈接,將呈現新文件上傳嵌套表格。 即使我正在使用rails3 beta4,它也出乎意料地起作用(而且我知道不贊成使用“ link_to_function”)

有沒有沒有使用link_to_function或一些AJAX調用的更好的方法嗎?

提前致謝 ;)

如果它能正常工作,那么剩下的唯一要做的就是將JavaScript調用移到一個單獨的what.js.erb文件中,使其看起來更漂亮:

whatever.js.erb:

“” $('#documents')。append('<%= escape_javascript(render('/ realties / document',:f => f))%>);“

(請注意將紅寶石代碼插入到erb標簽的字符串中的更改)

現在您應該可以執行以下操作:

“無論”},:remote => true%>

代碼將更加簡潔,輸出的html看起來會更好,因為現在那里沒有任何javascript。 只需確保您的文檔為html5並包含JS庫(由於代碼有效,您就可以這樣做了:)。

我本人正在使用Prototype,但在JQuery中應該沒有什么不同。 我現在能想到的唯一弱點是將表單塊傳遞給了partial,但是它應該可以工作,想不上太遲了:)

在這里發布是否有效,如果沒有成功,我們會解決。 晚安吧;]

您可能想看看我的項目https://github.com/adamaig/complex-form-examples ,它是從其他人的作品中衍生而來的。 相同的方法適用於Rails 3(我剛剛在本地升級了該項目以進行測試)。 最大的問題是深度嵌套的元素,但是該項目應演示使用jquery和rails生成的模板的ujs方法。

好的,很抱歉,但是我沒有注意到您不希望ajax調用。 我不確定如果調用頁面對象仍然不會進行該調用。 我認為要完全不使用ajax來調用它,就必須在客戶端以某種方式緩存該字段。 您完全確定您的示例無需ajax調用即可工作嗎?

如果能做到,那么讓我想起來“不那么麻煩”的唯一方法就是將javascript提取到application.js文件中,該文件用於存儲您自己的javascript,然后從視圖內部調用該函數。 那就是如果您包含該文件(application.js)。 這將只是將javascript從視圖中移開,而根本不改變代碼的工作方式。

干杯:)

這確實超出了我使用嵌套表單和UJS的經驗,但是這是另一個想法,請不要將FormBuilder實例傳遞到局部中。 也許會起作用。 我看過陌生的東西起作用。 這可能是正確的,因為您將其渲染到該表單內部,因此無需直接傳遞實例就可以訪問該實例。 如果這不起作用,那么將需要比我更聰明的人來回答您的問題:)

參見RailsCasts第196和197集

我為僅鏈接的答案表示歉意,但沒有人比Ryan更好:

196.嵌套模型表格第1部分

197.嵌套模型表格第2部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM