【问题标题】:Using Ruby Variables in JavaScript在 JavaScript 中使用 Ruby 变量
【发布时间】:2021-08-28 16:53:58
【问题描述】:

我是 Ruby 新手,所以我有一个关于在我的代码库中使用一些变量的问题。我在我的 Ruby 文件中声明了一个变量,如下所示:

@pages = 350

现在,我知道在 HAML 中,我可以简单地执行以下操作: -if @pages = 350,在带有内联 javascript 的 HAML 中,我可以执行以下操作:

:javascript
   console.log("#{@pages}");

但是,我在我的 HAML 文档中链接了一个外部 JavaScript 文件,我想知道是否可以在我的外部 JS 文档中使用我的 Ruby 变量?我需要一些变量来构建我想要构建的东西。谢谢!

根据答案之一更新:

在我的 HAML 文件中,我有以下内容:

:javascript
   printPages(3);

在我的外部 JS 文件中,我有:

$(function() { 
   window.printPages = function(pages) { 
        console.log(pages);
    }
});

【问题讨论】:

    标签: javascript ruby haml


    【解决方案1】:

    您正在加载静态 javascript 文件,我真的不建议尝试将变量插入该代码。

    相反,请考虑如何将其提供给您的 javascript 代码。


    您可以将它作为参数发送到该代码。

    <script type="text/javascript" src="./my-external-script.js"></script>
    
    :javascript
      runMyExternalFunction(#{@pages})
    

    或者您可以将该变量作为数据属性添加到您的页面上,并且您的 javascript 可以在加载时查找它。

    哈姆:

    %body data-pages=@pages
    

    JS:

    console.log(document.body.dataset.pages) // value of @pages
    

    更新您的 javascript:

    使用 jquery 的页面就绪事件$()声明函数是个坏主意。这意味着它会等待页面上的所有内容都加载完毕,然后声明您的页面需要的功能。

    您应该立即设置所有需要的函数,然后在页面加载时调用这些函数。

    按照你的方式,页面加载,printPages() 被执行(还不存在),然后printPages 被创建并放入全局范围。

    因此,请从您的外部脚本中删除 $(),然后将其添加到您的 HAML。

    事实上,如果您没有在转译或捆绑方面做任何超级花哨的事情,那么您可以简单地在您的外部 JS 文件中声明该函数,它将在全球范围内可用。这不适用于您的代码,因为它们以您声明函数的方式,它只能用于该 $() 回调中的代码。

    // js file
    function printPages(pages) { 
        console.log(pages);
    }
    

    HAML:

    $(() => {
      printPages({@pages})
    })
    

    【讨论】:

    • 谢谢!我喜欢关于调用外部函数的第一个建议。虽然当我在我的 JS 文件中有一个名为“printPages(pages)”的函数时,当我尝试内联 javascript 调用“printPages(#{@pages})”时,我得到错误 printPages is not defined。我知道该文件已链接,因为我可以在外部 JS 文件中的函数之外使用 console.log(),并且它会在 HAML 页面加载时显示。
    • 这取决于printPages 的声明方式。为此,您需要它在全球范围内可用。这意味着将其分配给window 对象。 window.printPages = function(pages) { ... } 但这也取决于你的 javascript 是如何被捆绑/编译/转译的。
    • 不幸的是,我仍然收到未定义 printPages 的错误。我正在使用我的 JS 代码以及我在 HAML 中调用该函数的方式来更新我的代码。如果你能看一下,现在在我原来的问题中
    • 啊,我明白了,非常感谢!这有效,您对 $() 的解释有助于确定哪些代码应该放在这些括号中,哪些不应该!
    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 2013-09-17
    • 2012-11-20
    • 1970-01-01
    • 2014-07-15
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多