地址在这儿
刚才发现的,很想动手试试,但近期没有时间,
各位瞅瞅,你们认为它科学吗?好用吗?比起 gon + jbuilder 如何?
向页面传递变量很稀有,直接 to_json 放 script tag 就好了
script | xxx = #{{ data.to_json }}
唯一要注意的是 json 里可能包含 '</script>' 标签,所以设置里加上
'</script>'
ActiveSupport.escape_html_entities_in_json = true
就安全了。
传递代码的情况就更稀有了... 就为了一两个 case 加个 gem 感觉不值得...
#1 楼 @luikore 传递变量这个需求是比较稀有,但在数据可视化中应该比较常见。
比如说 lazy_high_charts 就是使用您所说的直接在页面中写脚本的形式。但是,一个图表有几十个选项,其中大多数选项可能都是固定的,另外七八个选项才是真正的变量,在每个一个页面中都去插入完整的选项列表和显示所需的完整的 js 代码,其实是相当丑的,重复代码量非常大,这时很自然的就会想把图表显示 js 文件(不是图表库文件)集成进 application.js,然后在页面中获取变量。
另一个需求,我可能没有把“js 按页面执行”这一点说清楚,它其实是解决 这个帖子 和 这个帖子 中所描述的问题,这个问题相信困惑过绝大多数 rails 开发者吧?
#2 楼 @xhj6 不管几个变量,放在一个 hash 中 to_json, 页面上最多就一个 script 标签一个变量... 页面传非默认的设置就好了,重复的逻辑和默认值写在分离的 coffee/js 文件中啊,还有 $.extend 这种便利的工具。提不出来逻辑的时候想想 function as value 就能提出来了。
按页面载入 js 也有两种,大部分情况下 js 是静态的编译时就定好了的,加个 js 按需加载的工具就可以了,根本就没 rails 什么事。小部分情况是通过用户输入生成 js, 我整过一个解析用户创建的 excel 公式然后编译成 js 函数做计算的,也只需要一个 script 标签一个变量...
99.9% 情况下动态的都是数据,逻辑都是固定的,分清楚了代码就不会丑。
#3 楼 @luikore 好吧,你说服我了,这个 gem 的确没什么用
我现在的按需加载 coffeescript 文件的方式是在 body 标签中加个 ID,然后找到这个 ID 后则执行,一直深以为丑,但与引入一个 gem 相比,的确是简单多了……我还以为这个 gem 的解决方案更优雅呢。