Rails 究竟是如何渲染 JavaScript 代码的,然后由浏览器执行?这种事情的数据流是什么。
1 回答
在执行控制器视图时,Rails 将 Javascript 代码呈现为浏览器的回调。使用称为 AJAX 的东西。
当我单击一个元素或使用 AJAX 通过浏览器进行调用时,就会发生这种情况。AJAX 允许您在不刷新页面的情况下进行远程浏览器调用。由于您不刷新页面,因此更新您正在查看的当前页面的唯一方法是让控制器在浏览器中呈现 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/