2011-01-30 47 views
1

我正在使用基於JQuery的文件上傳插件將圖像文件直接上傳到S3。該插件工作正常,在模型中實現的上傳代碼也很實用。我的問題是文件完成其快速旅程後會發生什麼。Javascript中的Rails標籤呈現

該插件接受一個回調'onLoad',該回調在上傳完成後執行。爲了回調起作用,所需要的只是一個Javascript函數,你知道,它會做任何事情。好的。我想要的是回調加載一個部分,將替換上傳形式與圖像的顯示。因此,這裏是我如何指定回調:

onLoad: function (evt, files, index, xhr, handler) { 
    (document).ready(function($) { 
     $('.container').html('<%= escape_javascript(render :partial => "pictures/picture_editor", :locals => { :picture => @picture }, :layout => false) %>')}); 
} 

那麼 - 我想要的,當然,是針對「渲染」標籤前的回調渲染,但是這確實是什麼發生。加載頁面後,立即出現錯誤,因爲Rails正在嘗試呈現該標記,而不等待執行Javascript或其他任何內容 - Rails在視圖中看到標記,並且想要呈現它。我試着研究一個答案,我覺得我必須丟失的東西痛苦顯而易見 - 但我怎麼加載部分從jQuery回調,如果我不能在視圖中指定渲染標記?我錯過了什麼?

如果答案非常明顯,我很抱歉。

+0

此javascript是否包含在您的js文件或rjs tempalte中? – raidfive 2011-01-30 04:47:58

+0

它在部分被模板加載,但我想把它放在一個js文件中就沒有問題。 – Lockjaw 2011-01-30 05:06:38

回答

1

部分不能單獨呈現(例如在ajax響應中)。我想一個辦法將修復它,假設你仍然需要部分爲部分(即你需要使它與其他網頁的一部分),爲:

  1. 創建一個PicturesController#picture_editor動作,只是呈現局部沒有佈局。
  2. 在JavaScript事件處理程序中,使用jQuery的「加載」函數將該操作加載到div中。

像這樣在PicturesController:

def picture_editor 
    @picture = Picture.find(params[:id]) 
    render :partial => 'picture_editor', :picture => @picture :layout => false 
end 

並且這在JavaScript(在.html.erb或.js.erb文件,以便它將被紅寶石進行處理;在不生的.js ):

$('.container').load('<%= url_for(:controller => 'Pictures', :action => 'picture_editor' %>')});