【问题标题】:Ruby inside CoffeeScriptCoffeeScript 中的 Ruby
【发布时间】:2011-11-15 12:49:29
【问题描述】:

posts.js.coffee.erb

$('.list').infinitescroll {url: '<%= list_posts_path %>', triggerAt: 700, container: $('.container'), appendTo: $('.container'), page: 1}

这是一个例外:

throw Error("NameError: 未定义的局部变量或方法 `list_posts_path' for #\n ...

list_posts_path 如果我在控制器中使用它会返回正确的路径。我做错了什么?

【问题讨论】:

    标签: ruby-on-rails coffeescript


    【解决方案1】:

    是的,不要那样做。 :)

    即使您使用的是 ERB,您也不在控制器中。 coffeescript 编译器对您的路由或路由助手一无所知,您的视图通常可以通过控制器访问它们。

    【讨论】:

    • 有没有办法让这条路径进入 js?
    • @Jonas 使服务器端数据可用于 JS 的最佳方法是将&lt;script&gt; 标签放入您的页面(通过视图或布局),该标签提供 just i> 该数据。 (或者,如果数据不需要在页面加载时可用,请使用 Ajax。)这样,您的所有其他 JS 都可以连接、缩小和缓存。
    【解决方案2】:

    我遇到了同样的问题,如前所述,您可以执行以下操作:

    your_layout.html.erb

    &lt;%= render partial: 'your_partial.html.erb', locals: { action_url: list_posts_path } %&gt;

    _your_partial.html.erb

    &lt;div id='container' data-action-url="&lt;%= action_url %&gt;" .... &gt;

    posts.js.coffee.erb

    jQuery -> url = $('#container').data('action-url') console.log "loading url: #{url} !!!"

    【讨论】:

      【解决方案3】:

      另一种选择是在某个相关元素上设置一个保存路径的数据属性...然后使用 js/coffee 代码获取它

      【讨论】:

        【解决方案4】:

        包括

        <% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %>
        

        在coffeescript文件的开头,然后你就可以访问路由了

        【讨论】:

          猜你喜欢
          • 2011-12-22
          • 1970-01-01
          • 2012-01-07
          • 2016-06-27
          • 2012-04-21
          • 2018-02-10
          • 2011-07-07
          • 2023-03-13
          • 2014-11-22
          相关资源
          最近更新 更多