Rails 3:将字符串从 Ruby 传递到 Javascript?

Posted

技术标签:

【中文标题】Rails 3:将字符串从 Ruby 传递到 Javascript?【英文标题】:Rails 3: Passing a string from Ruby to Javascript? 【发布时间】:2011-11-22 10:46:38 【问题描述】:

吉斯特:

<script type="text/javascript"> 中,我想从 Ruby 到 Javascript 访问静态(Rails 将页面交付给客户端后永远不会更改)字符串。

更多细节(又名:我为什么要这样做。)

我使用一个名为 Juggernaut 的推送服务器,它必须连接到适当的“通道”,由控制器中的变量确定。 “监听”主宰服务器的主宰语法是:

j.subscribe("channel", function(data)  )

我希望它是:

j.subscribe(<%= @myChannel %>, function(data)  )

【问题讨论】:

你的想法不错。你的问题是什么?它怎么不工作? 如果我尝试 alert() 该行之后的所有内容都不起作用,并且警报不会执行。此外,如果我将该 Ruby 代码作为 juggernaut 的参数放入,则不会执行 juggernaut 订阅函数。 【参考方案1】:

您的@myChannel 很可能不包含"

你应该使用:

j.subscribe("<%= @myChannel %>", function(data)  )

【讨论】:

啊,完美!一个简单的初学者错误!【参考方案2】:

另一种想法是不要将 ruby​​ 代码嵌入到 .js 文件中,而是嵌入到视图本身中。

因此,在您看来,要么设置一个 javascript 变量 channel,要么将“通道”添加为某个 html 元素的属性,以更适合您的情况为准。然后在您的应用程序 javascript 中,您可以在文档准备好后访问该变量。

这有一个附带的好处,即如果/当频道更改时,客户端不需要重新下载您的 javascript,而是可以继续从缓存中使用它,并且 rails 不需要每次都渲染 .js。

【讨论】:

很好的建议。从来没想过。谢谢! +1 是的,这是最好的方法。它还使您能够使用工具链来正确处理 js 文件:最小化并与其他 js 连接,以便每个 html 页面只下载一个 js。第三种选择是让您的 html 页面通过调用 start js 方法显式启动 js 操作。然后将通道作为参数传递给调用。

以上是关于Rails 3:将字符串从 Ruby 传递到 Javascript?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ruby on Rails 将数据从控制器传递到模型?

Ruby on Rails:将字符串数组传递给highchart函数

在 ruby​​ on rails 中将参数从视图传递到控制器

如何使用 AJAX 请求将用户在类变量中的 HTML5 位置从 JavaScript 传递到 Rails 控制器?

通过javascript在ruby on rails中传递项目ID值

如何使用 Rails 3 更新到 jQuery 1.7+?