【问题标题】:rails add object in javascript urlrails在javascript url中添加对象
【发布时间】:2014-10-30 18:05:22
【问题描述】:

我在一个 js 文件上使用了这个函数,它可以工作

 $(function() {


$("#badgebutton").click(function() {
    var assertions = [
        "http://www.exemple.com/patents/5555/badge.json"
    ];
    OpenBadges.issue(assertions, function(errors, successes) {
        console.log("callback called");
        console.log("Errors:", errors);
        console.log("Successes:", successes);
    });
});
});

代替数字:

"http://www.exemple.com/patents/5555/badge.json"

我想使用patent.id。我试过这个:

"http://www.exemple.com/patents/#{@patent.id}/badge.json"

和其他一些没有成功的解决方案..

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    尝试这样做:

    "http://www.exemple.com/patents/<%= @patent.id %>/badge.json"
    

    但是,当您在 routes.rb 文件中定义它们时,建议使用 Rails 生成的路由辅助方法。例如:

    <%= badge_patents_path(@patent, :format => :json) %>
    

    【讨论】:

    • 如果我将 javascript 放在视图中,但不是放在单独的 .js 文件中,这可以正常工作。它给了我一个错误……奇怪。
    • @MAGE 这是因为 Rails 辅助方法在资产目录中不可用。为此,您可以让它们可用:stackoverflow.com/a/26615645/645886 或在 #badgebutton 元素上创建一个 data-url 属性,然后在 JavaScript 中调用它:$(this).data('url'),如果你问我,我更喜欢后者。
    【解决方案2】:

    您应该使用 JS 上下文将专利 id(或者最好是整个 url)传递给 js 文件,这可以通过以下几种方式完成:

    1. 使用全局变量:

    在你的部分(erb)中:

    <script type="text/javascript">
      window.patent_url = "http://www.exemple.com/patents/#{@patent.id}/badge.json"
    </script>
    

    然后在JS文件中使用全局的patent_url变量。

    1. 重做您的 JS 文件以封装 JS 逻辑,但接收像这样的正确参数。

    它可能看起来像这样:

    window.badgebutton_handler = function(url) {
      OpenBadges.issue(url, function(errors, successes) {
        console.log("callback called");
        console.log("Errors:", errors);
        console.log("Successes:", successes);
      });
    }
    

    并在 erb 文件中像这样绑定处理程序:

    <script type="text/javascript">
      $("#badgebutton").click(function() {
        badgebutton_handler("http://www.exemple.com/patents/#{@patent.id}/badge.json");
      });
    </script>
    

    问题是您应该将变量或 url 传递到您拥有它的地方,那就是 ERB 模板文件。

    【讨论】:

    • 1.部分,你的意思是我的观点吗?因为我没有偏? 2.我不明白如何像你建议的那样更改我的JS文件,对不起
    • 是的,我是说你的观点。 ERB 文件是部分视图或普通视图。我还用完整的 JS 文件实现更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2010-12-17
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多