【问题标题】:Rails + jQuery SPA RoutingRails + jQuery SPA 路由
【发布时间】:2014-09-05 23:21:11
【问题描述】:

为了暂时避免陷入前端框架,我正在构建一个仅使用 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());
});

当用户第一次访问应用程序时,他们会看到来自complex_query_1@items。为了避免查询运行时间过长,我实现了一种更“SPA”的加载方式:

  1. 当用户访问应用程序时,index 操作被触发并服务于基本布局。

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

  3. 动作响应js,通过jQuery刷新视图。

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

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

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

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    一些应用程序使用的一种解决方案是在 url 中使用片段来确定应用程序应如何响应。

    所以你的外部链接应该是

    /index#complex_query_2
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2018-03-27
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2018-11-18
      相关资源
      最近更新 更多