我很好奇用 jquery 加载 rails 部分的最佳方法是什么。到目前为止,我尝试了一个不起作用的解决方案:
$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});
是为此构建单独的动作和/或控制器并设置路线的最佳解决方案吗?我问是因为使第一个解决方案工作似乎更容易,也许不是那么平静。
谢谢。
我很好奇用 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 不会将视图文件暴露在外部。为了实现你想要的东西,你需要一个可以呈现这个部分的动作:
def image_gallery
render :partial => "image_gallery"
end
还有一个名为 jRails 的插件,它将标准的 ajax 助手(使用原型)替换为等效的面向 jquery 的助手。在你的情况下,你会使用类似的东西
<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>
更重要的是,在 Rails 3 中您将不需要它。请参阅此链接。
另一种选择:
$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
使用rails 3,您可以...
控制器
@content = '/some/partial'
查看 - 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);
}
我确实同意 neutrino 的观点,即这可以通过一个动作来更好地处理。
def get_partial
render 'some/partial'
end
希望这可以帮助