Rails在Javascript中标记渲染

时间:2011-01-30 04:22:13

标签: jquery ruby-on-rails jquery-plugins

我正在使用基于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回调中加载一个部分?视图?我错过了什么?

如果答案非常明显,我道歉。

1 个答案:

答案 0 :(得分:1)

部分不能独立呈现(例如在ajax响应中)。我认为解决它的一种方法是,假设你仍然需要局部部分(即你需要将其作为其他页面的一部分呈现),是:

  1. 创建一个PicturesController#picture_editor操作,只显示没有布局的部分。
  2. 在JavaScript事件处理程序中,使用jQuery的'load'函数将该操作加载到div中。
  3. 在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' %>')});