在rails / jquery应用程序中创建一个ruby时,页面的一部分是生成耗时的。
我想改变页面的加载方式,以便大部分的页面立即加载,并且占位符被保留用于耗时的部分以异步方式加载,并且在完成后被注入到具有ajax / jquery的页面中。
我现在(简化):
app / views / sample / show.html.erb:
<div id="theResult"> <%= render :partial => 'calculate',:object => @org) %> </div>
并且部分将使用一些部分@org来生成一些内容(击中另一个外部REST服务)。
app / views / sample / _calculate.html.erb
<% # code to take org and turn it into content %> <!--...html to display results here -->
我意识到这可能是破坏正确的MVC架构规则,因为我的部分似乎有太多的逻辑,并且想清理它…
所以我想我有两个问题在一起:(1)我该如何让这个工作,和(2)我应该如何清理它遵循良好的ruby / rails / mvc做法?
解决方法
首先在主要回应中放一个空的占位符div
<div id="pink-dancing-elephants"></div>
$.ajax({ url: "/elephants/dancing",cache: false,success: function(html){ $("#pink-dancing-elephants").append(html); } });
并且具有响应/大象/跳舞/粉红色的动作返回要填充的div的HTML块。在由AJAX请求调用的动作中,您将需要使用以下命令进行渲染:layout =>错误地保留返回的HTML包含整个框架。例如。
# elephants_controller.rb def dancing @elephants = #whatever render :layout => false end
这将使模板在views / elephants / dancing.html.erb中。