【问题标题】:Dynamic path in new.AjaxRequest with Rails带有 Rails 的 new.AjaxRequest 中的动态路径
【发布时间】:2010-05-27 15:50:29
【问题描述】:

我想知道是否有办法通过 Ruby on Rails 将“动态路径”放入 .js 文件中。

例如,我有以下内容:

new Ajax.Request('/tokens/destroy/' + GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)})

主 URL 是“/tokens/destroy/:id”,但是在我的生产服务器上,此应用程序作为子文件夹运行。所以这个 ajax 调用的 URL 需要是 '/qrpsdrail/tokens/destroy/:id'

调用它的 URL 是 /grids/1 或 /qrpsdrail/grids/1

当然,我可以做 ../../path —— 但这似乎有点老套。它还取决于路由永远不会改变,在这个阶段我不能保证。 我只是想看看这个问题还有什么其他解决方案。

提前致谢:)

【问题讨论】:

    标签: ruby-on-rails ajax prototypejs


    【解决方案1】:

    也许有点骇人听闻的解决方案,但我有一个类似here 描述的配置文件,因此您可以在config.yml 内执行类似操作:

    development:
      root: /
    
    production:
      root: /qrpsdrail/
    

    当你构建你的 Ajaxrequest 时,你可以写

    new Ajax.Request("#{AppConfig.root}tokens/destroy/' + ...
    

    但看起来应该有一种更清洁的方法来解决这个问题;)

    【讨论】:

    • 我做了类似的事情,但是我仍然认为它是“hackish”......我只是在模板的顶部设置了 var ROOT_PATH = #{root_path} 并且可以在静态 grid.js 库。我正在研究可能使用 javascript 模板(rjs?)......但从我读到的内容来看,它不会像 .js 文件那样被缓存。
    【解决方案2】:

    您可以在 new.AjaxRequest 中使用动态路径,在 rails 中使用 javascript

    javascript

     function dynamic_ajax(GRID_ID)
      {
          new Ajax.Request("/tokens/destroy?"+GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)});
      }
    

    html

    <a href="javascript:void(0)" onclick="dynamic_ajax('1')">Grid Id 1 </a>
    <a href="javascript:void(0)" onclick="dynamic_ajax('2')">Grid Id 2 </a>
    <a href="javascript:void(0)" onclick="dynamic_ajax('3')">Grid Id 3 </a>
    

    【讨论】:

    • 问题不在于 GRID_ID,它是我在应用程序其他地方实际初始化的常量 - 问题是 Ajax.Request 调用的 URL - 它在我的两个环境中都不起作用,因为它调用绝对路径。对不起,如果问题含糊不清。
    【解决方案3】:

    您可以将路径设置为启动 ajax 调用的 html 对象的属性。一个例子是:

    HTML

    <a id='my_clicky_thing' href='#' rails_path='<%= tokens_destroy_path %>'>Click me</a>
    

    jQuery

    $('#my_clicky_thing').live('click', function(){
      var ajax_path = $(this).attr('rails_path');
      /* Do ajax stuff here with the path */
    });
    

    这将允许您在 .js 文件中使用实际的 rails 路径,就像在视图中一样。

    (此代码可能不起作用,仅用于概念)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2020-01-31
      • 2012-12-02
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多