Javascript 保持页面状态 - 最佳实践?

标签 javascript ruby-on-rails ruby model-view-controller erb

我正在使用 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/

相关文章:

javascript - 在使用 gulp 和 angular.js 构建的网站中,CSS 和 JS 作为 HTML 的副本加载

ruby-on-rails - 在 rails (belongs_to) 中创建子模型并预先设置父 ID

Ruby EventMachine,终止正在运行的进程?

ruby-on-rails - 将数组参数传递给 link_to

ruby-on-rails - Nokogiri 是针对 LibXML 版本 2.9.1 构建的,但已动态加载 2.8.0

javascript - 从数据集中删除相似的数据点

javascript - 谷歌自定义搜索确定何时加载脚本

javascript - 如何在 CSS 中获得鼠标移出效果

ruby-on-rails - Ruby on Rails 最佳实践——为共享布局创建页面 Controller ?

ruby-on-rails - ActsAsTaggableOn 未定义方法 '[]=' 为 nil :NilClass - Create Action