render:js如何工作?

时间:2012-06-13 19:21:23

标签: ruby-on-rails

Rails如何呈现javascript代码然后由浏览器执行?这种事情的数据流是什么。

1 个答案:

答案 0 :(得分:1)

Rails在执行Controller View时将Javascript代码渲染为对浏览器的回调。使用名为AJAX的东西。

当我点击元素或使用AJAX通过浏览器拨打电话时会发生这种情况。 AJAX允许您在不刷新页面的情况下进行REMOTE浏览器调用。由于您不刷新页面,更新您正在查看的当前页面的唯一方法是让控制器在浏览器中呈现javascript。浏览器接受这个javascript并像代码一样执行它。 javascript可用于执行任何操作,包括更新页面上显示的数字,从页面中删除内容,添加整个DIV信息。

例如,一个例子就是你点击网页上的删除按钮删除你的帖子。删除按钮向服务器发送REMOTE消息,通常在RAILS项目的VIEW CONTROLLER中调用METHOD。在我们的例子中,它只是告诉服务器从数据库中删除帖子。它执行此操作然后METHOD会看到,由于您以远程方式询问某些内容,因此它选择呈现JS响应。

def destroy
  @note = Note.find(params[:id])
  @note_id = @note.id
  @note.destroy
  respond_to do |format|
    format.html do // This is Rendered if the Message to Delete was NOT sent remotely
      flash[:success] = "Note Deleted Successfully" 
      redirect_to root_path
    end
    format.js  // Since we did send it Remotely, it then renders our Javascript Response
  end
end

在我们删除内容的情况下,javascript响应将是一条消息,告诉浏览器删除保存您要删除的内容的DIV或页面元素。

$('#note-<%= @note_id %>').hide('slow', function(){ $('#note-<%= @note_id %>').remove();  }); // Hides the Post and then Removes it in a Smooth slow animation
$('.alert').slideUp('slow', function(){ $('.alert').remove(); }); // Shows the Alert with the alert

如果我们没有将回调呈现给浏览器,由于页面没有刷新,因此在手动刷新页面之前不会显示帖子被删除。这样可以使页面更加动态并节省带宽,因为您不必刷新页面,然后您不再需要从服务器再次下载所有内容,从而实现更加无缝的用户体验。而且,由于你使用JQuery动画,它看起来也很令人印象深刻。

这是一个迷你教程,我发现它以非常类似的方式使用Rails 3和JQuery:

http://blog.bernatfarrero.com/jquery-and-rails-3-mini-tutorial/