Rails + jQuery SPA路由

时间:2014-09-05 14:13:46

标签: ruby-on-rails routing

为了避免暂时进入前端框架,我只使用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”的加载方式:

  1. 当用户访问该应用时,会触发index操作并提供基本布局。

  2. 然后通过js触发complex_query_1的加载指示符和POST请求。

  3. 操作响应js并通过jQuery刷新视图。

  4. 所有内部链接都是AJAX,因此基本布局永远不会重新加载,保留了“SPA”的感觉。

    我在应用程序外部发布了一个路障。例如,如果我从应用程序外部导航到/complex_query_2,则不会提供html布局。我可以指定format.html布局,但是在提供html之前必须加载长查询。

    是否有替代/更好的方法来构建SPA感觉的应用程序?

1 个答案:

答案 0 :(得分:0)

某些应用使用的一种解决方案是使用网址中的片段来确定应用应该如何响应。

所以你的外部链接应该是

/index#complex_query_2

索引路径将提供html布局,您可以在javascript中解析网址以获取complex_query_2部分。然后使用它来确定应该采取什么行动。