[英]load partial with jquery and rails
我很好奇用jquery加載rails部分的最佳方法。 到目前為止,我嘗試了一個不起作用的解決方
$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});
是否為此構建單獨的操作和/或控制器並設置路徑是最佳解決方案? 我問,因為使第一個解決方案工作似乎更容易,也許不那么安靜。
謝謝。
您應該無法從HTTP請求訪問模板文件(.erb),這是非常糟糕的做法。 我建議你把它們放在你的web服務器路徑之外,只能通過你的應用程序訪問它們。
我不確定Rails,但我想你需要創建一個單獨的控制器(或其他)來做到這一點。
編輯這是因為.erb文件是嵌入式Ruby文件,如果您嘗試請求它們,您將獲得不想向用戶顯示的所有不需要的數據,如<%= page_title %>
。 因此,您需要通過Rails應用程序傳遞這些.erb文件,以便將它們正確解釋為HTML。
使用rails 3你可以做...
調節器
@content = '/some/partial'
view - haml.erb(html.erb)或js.erb
$('#myDiv').html("<%= escape_javascript render @content %>");
你可以嘗試這個如果rails 2(只有原型可用,除非noConflict添加)...
在控制器中
@content = render :partial=>"/users/cool_partial"
打電話給你的js
myFunction(#{@content.to_json})
你的功能......
myFunction = function(content){
$("myDiv").html(content);
}
我同意中微子的看法,這可以通過一個動作得到更好的處理。
def get_partial
render 'some/partial'
end
希望這可以幫助
另一種選擇:
$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
代碼不起作用的原因是rails不會在外部公開視圖文件。 要實現你想要的東西,你需要一個可以渲染這個部分的動作:
def image_gallery
render :partial => "image_gallery"
end
還有一個名為jRails的插件,它將標准的ajax助手(使用原型)替換為等效的面向jquery的助手。 在你的情況下,你會使用類似的東西
<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>
更重要的是,在Rails 3中你不需要它。 看到這個鏈接 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.