2010-02-09 42 views
9

我很好奇最好的方式來加載與jQuery的部分導軌。到目前爲止,我已經嘗試不工作的解決方案:加載部分jQuery和導軌

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() { 
alert('Load was performed.'); 
}); 

是建立此一個單獨的動作和/或控制器,併成立了一個路線的最佳解決方案?我問,因爲使第一個解決方案的工作似乎更容易,可能不那麼寧靜。

謝謝。

+0

就像一個音符,你不能使用的.html()來加載你的諧音無論是。即使你用Ruby代碼來調用它。這是因爲它會將整個表單渲染在引號和整個頁面之間。如果我知道一個,我會建議另一種方式,但這正是我正在尋找自己的atm。 – 2013-02-19 20:01:33

回答

8

您應該無法從HTTP請求訪問模板文件(.erb),這是非常糟糕的做法。我建議你把它們放在你的Web服務器路徑之外,只能通過你的應用程序訪問它們。

我不知道Rails,但我想你需要創建一個單獨的控制器(或其他)來做到這一點。

編輯這是因爲.erb文件被嵌入的Ruby文件,如果你試圖要求他們,你會得到所有不需要的數據,如<%= page_title %>,您不希望顯示的用戶。因此,您需要通過Rails應用程序傳遞這些.erb文件,以便將它們正確解釋爲HTML。

+0

好的 - 謝謝你的見解。我會相應地構造它。 – Christian 2010-02-09 16:21:23

3

代碼不起作用的原因是rails不會在外面暴露視圖文件。爲了達到你想要的東西,你需要一個行動,這將使該部分:

def image_gallery 
    render :partial => "image_gallery" 
end 

也有一個插件叫做jRails它取代標準的AJAX助手(使用原型)具有同等面向jQuery的人。在你的情況下,你會使用類似於

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %> 

甚至更​​多,在Rails 3中,你將不需要它。請參閱this link

+0

謝謝 - 我期待在Rails 3中看到所有新東西。 – Christian 2010-02-09 16:22:22

3

了Rails 3,你可以做...

控制器

​​

觀點 - 無論是haml.erb(html.erb)或js.erb

$('#myDiv').html("<%= escape_javascript render @content %>"); 

你可以試試這個,如果梁2(只提供樣機除非noConflict加)...

在控制器

@content = render :partial=>"https://stackoverflow.com/users/cool_partial" 

打電話給你的js

myFunction(#{@content.to_json}) 

你的功能...

myFunction = function(content){ 

    $("myDiv").html(content); 

} 

我與中微子,這可能是更好的處理達成一致通過行動。

def get_partial 
    render 'some/partial' 
end 

希望這有助於

3

另一種選擇:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');