我正在使用基于JQuery的文件上传插件将图像文件直接上传到S3。该插件工作正常,在模型中实现的上传代码也是很好的。我的问题在于文件完成快速旅程后发生的事情。
该插件接受回调“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回调中指定渲染标记,我该如何从jQuery回调中加载一个部分?视图?我错过了什么?
如果答案非常明显,我道歉。
答案 0 :(得分:1)
部分不能独立呈现(例如在ajax响应中)。我认为解决它的一种方法是,假设你仍然需要局部部分(即你需要将其作为其他页面的一部分呈现),是:
PicturesController#picture_editor
操作,只显示没有布局的部分。在PicturesController中有这样的东西:
def picture_editor
@picture = Picture.find(params[:id])
render :partial => 'picture_editor', :picture => @picture :layout => false
end
这在JavaScript中(在.html.erb或.js.erb文件中,因此它将由Ruby处理;而不是在原始.js中):
$('.container').load('<%= url_for(:controller => 'Pictures', :action => 'picture_editor' %>')});