我正在使用 ruby on Rails 制作 Web 应用程序原型(prototype)。
我是 Rails 的新手,但这个问题总体上与 MVC 编程相关。
过去,当我的模型包含一些需要从 javascript 文件访问的相关信息时,我会在模板中包含一些内联 javascript 并将其转储到全局变量中:
<script type="text/javascript">
var nodes=<%= @nodes.to_json.html_safe %>;
</script>
但是,在生产中,我的计划是使用 uglifier 来压缩我的 javascript 文件,我的猜测是它不会知道将我的 erb 文件中的节点变量重命名为与缩小的 javascript 同步。
(我认为将其存储在命名的隐藏输入中可能会解决缩小问题,但感觉更黑客......)
所以我的问题是:
您能否提出比在全局命名空间中转储 json 对象更优雅的替代方案来存储页面状态?
最好是在 Rails 中,但我也有兴趣看看人们如何在其他 MVC 框架中解决这个问题......
谢谢
最佳答案
内联 JavaScript 很糟糕。当您将 JS 值创建为字符串时,情况会加倍。它会造成可维护性问题,应该永远从你的技巧包中消除。 JavaScript 属于外部 JavaScript 文件,这些文件应该是静态的。
你想要的是这样的:
(查看文件)
<div id="nodes"><%= @nodes.to_json %></div>
(CSS)
#nodes { display: none; }
(JavaScript)
var nodes = JSON.parse($('#nodes'))
无论您的服务器端语言如何,都是如此。
针对 Rails 的额外提示:使用 Haml 代替 ERb,使用 Sass 代替 CSS。好多了。
关于Javascript 保持页面状态 - 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984728/