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 控制器?