簡體   English   中英

使用jquery和rails加載部分

[英]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.

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