为了避免暂时进入前端框架,我只使用Rails和jQuery构建单页应用程序。
这是基本结构:
控制器
class MainController < ApplicationController
def index
respond_to do |format|
format.html
end
end
def complex_query_1
@items = # complex query
respond_to do |format|
format.js { render 'refresh.js.erb', :locals => { :items => @items } }
end
end
def complex_query_2
@items = # a different complex query
respond_to do |format|
format.js { render 'refresh.js.erb', :locals => { :items => @items } }
end
end
end
的application.js
$(document).ready(function() {
showActivityIndicator();
$.get(Routes.complex_query_1_path());
});
当用户首次访问该应用时,系统会@items
显示complex_query_1
。为了避免长时间运行查询,我实现了更“SPA”的加载方式:
当用户访问该应用时,会触发index
操作并提供基本布局。
然后通过js触发complex_query_1
的加载指示符和POST请求。
操作响应js并通过jQuery刷新视图。
所有内部链接都是AJAX,因此基本布局永远不会重新加载,保留了“SPA”的感觉。
我在应用程序外部发布了一个路障。例如,如果我从应用程序外部导航到/complex_query_2
,则不会提供html布局。我可以指定format.html
布局,但是在提供html之前必须加载长查询。
是否有替代/更好的方法来构建SPA感觉的应用程序?
答案 0 :(得分:0)
某些应用使用的一种解决方案是使用网址中的片段来确定应用应该如何响应。
所以你的外部链接应该是
/index#complex_query_2
索引路径将提供html布局,您可以在javascript中解析网址以获取complex_query_2
部分。然后使用它来确定应该采取什么行动。