【问题标题】:Rails change page view based on URLRails 根据 URL 更改页面视图
【发布时间】:2015-03-19 06:37:00
【问题描述】:

在一个 projects#index 页面上,我有 3 个不同的视图 [Grid, Map, Stats],每个视图都有一个按钮。当用户单击任何视图时,它会发送一个 AJAX 请求并加载该视图所需的内容。默认会加载网格视图。

现在我的客户想要根据以下 URL 直接加载视图:

 www.somedomain.com/projects#grid
 www.somedomain.com/projects#stats
 www.somedomain.com/projects#map

但是当我检查控制器时,它没有得到#grid、#stats 和#maps 的信息。我们如何在 Rails 中实现这一点。这可能吗 ?他不想和:

 www.somedomain.com/projects?view=grid
 www.somedomain.com/projects?view=stats
 www.somedomain.com/projects?view=maps

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2


    【解决方案1】:

    恐怕这是不可能的。对于您的后端应用程序,仅发送整个 www.somedomain.com/projects#grid 中的部分 www.somedomain.com/projects# 之后的“事物”用于浏览器。

    这么说 - 它适用于网络浏览器 - 检查此 answer 如何使用 javascript 从 url 中“获取”哈希。

    Here 解释了如何从 url 中“获取”和“设置”哈希值 - 如果您想从应用程序中对其进行操作。

    总结一下:

    var myCurrentLocation = window.location.hash.substr(1);
    
    switch (myCurrentLocation) {
        case 'stats':
            $.ajax(/** handler for stats */);
            break;
        case 'map':
            $.ajax(/** handler for map */);
            break;
        default:
            $.ajax(/** handler for grid, and default */);
            break;
    }
    
    
    /*
     * Other code
     */
    
    $('#showStats').click(function () {
        location.hash = '#stats';
    });
    

    祝你好运!

    【讨论】:

    • 感谢您的快速反馈,但如果我们使用 Javascipt。如果用户在 URL 中有 #,这意味着 2 个请求。首先它将加载默认内容,然后 JS 将检查 # 视图。并再次发送请求以呈现该特定视图。对吗?
    • @Kashif - 这取决于您当前应用程序的工作方式,但这是可能的。好吧 - 正如答案中提到的 - 你不能将 url 哈希发送到服务器。这是不可能的。您只能在客户端(Web 浏览器)中与存储在哈希中的值进行交互。请检查我的答案更新了一些概念,你可以如何继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2018-07-04
    • 2021-05-15
    • 2013-05-29
    • 1970-01-01
    • 2016-10-25
    • 2020-12-22
    相关资源
    最近更新 更多