2016-06-09 79 views
0

我有一个关于约定和最好的办法在轨道做事情的小问题。[RAILS] [Javascript]在javascript中使用控制器变量是否“干净”?

现在为一个视图我需要获得一个散列数组,我可以在我的控制器中更轻松地构建方法。我需要这个ARRY我的javascript代码...

所以我到目前为止,我发现了一个解决方案,是不是一个Ajax请求是这一个:

var toto = #{@controller_var.to_json} 

我知道它可能的“更好”做一个Ajax请求或将这个变量存储在erb代码中......但我试图限制自己去做Ajax请求(因为这个页面已经做了一些),我不喜欢创建隐藏的字段来存储我的控制器方法...

无论如何,如果你能就此给出你的意见/建议,我真的会赞赏它! :)

最好的问候!

+0

http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast如何使用railscasts方法?在将值传递给您的JavaScript时没有多少变化我认为...另外,由于资产编译,请谨防将您写入的行写入JavaScript文件。 –

+0

我没有完全得到你最后的想法......到目前为止我的线是在我的HTML(实际上是haml文件)...从我看到别的地方,我明白,如果我把这种代码放在它自己的JS文件中将不再工作,因为JS和Rails不沟通Rails和Html文件的方式...... – Naarsh

+0

你在做什么(把它放在html/haml中)是可以的。由于资产预编译,将它放入js文件并不好,但你似乎做得对。 –

回答

1

这种方法的主要问题是您的javascript现在与rails紧密耦合,并且无法在没有完整的rails服务器运行的情况下进行隔离测试。

我完全避免服务器生成的JavaScript出于这个原因。

即使你不走全面的方式,并建立了一个API驱动的客户端应用程序,你至少可以做的是一个DOM元素注入JSON:

<script id="toto" type="application/json"> 
    <%= @controller_var.to_json %> 
</script> 

现在,在您的测试情况下,你可以使用脚本可以包含模拟数据的静态HTML页面。

另一个问题是,你不能通过CDN服务器生成的JavaScript。这不是一个问题,如果你的js响应非常小,但现在与页面上存在的JavaScript交互,你很可能会使用全局变量。

除了全局变量导致代码不易维护的明显问题外,限制器和优化器可以执行死代码消除的程度也会受到很大影响。

+0

我收到你的评论,并感谢你。但个人而言,我并不期望从我的Rails环境中测试我的JS ......考虑到这一点,你是否仍然认为我的选择不是最好的? :)顺便说一句,我不是想要克服一些罪责或这样的;) – Naarsh

+0

我已经更新了我的答案与其他参数。请看最后2段。 – lorefnon

+0

非常感谢,我完全可以将你的观点应用到我目前的状况中,这是一个很大的帮助! :D – Naarsh

相关问题