Today's the day

向软件大牛炫耀我会焊单片机,向硬件大牛炫耀我会写 Rails,向软硬件大牛炫耀我生物,向软硬件生物大牛炫耀我会折腾期货 -_-bbb

迂回的实现了覆盖 helper 中的函数
rake rails:update

Ruby 数组转换成 Javascript 参数

galeki posted @ 2008年3月06日 12:14 in RoR with tags ruby javascript , 6137 阅读

有的时候数据存储在 Ruby 的数组里,如果你想把这个数组当作 Javascript 的函数的参数,比如:

@names = ['Zhangsan','Lisi']

你想把他作为参数传给 Javascript 代码,达到这样的效果:

a_js_function(['Zhangsan','Lisi']);

需要把 @names 转换成字符串的表达形式,你可能想到迭代数组中的每项,拼出最终的字符串,其实简单的方法是 inspect:

a_js_function(<%= @name.inspect %>);

因为在 Ruby 和 Javascript 中数组的表达是基本一样的,所以这样刚好达到了要求。

不过如果数组中有不期望的数据,比如 nil 或者一个复杂的对象什么的,结果可能就不是你希望的了。那么可以试试 array_or_string_for_javascript:

a_js_function(<%= array_or_string_for_javascript(@names) %>);

不过,array_or_string_for_javascript 会把数组中所有的项目都转换成字符串,所以如果数组是 [100, 200, 300] 就会被转换成 ['100', '200', '300'] 如果你想传入数值的话就用前面的 inspect 了。

另外还有一个 options_for_javascript,把 Ruby 的 Hash 转成 Javascript 的格式:

<%= options_for_javascript(:a => 1, :b => 2, :c => 3) %>
=>  {a:1, b:2, c:3}

Rails 中的 Helper 也用这俩函数生成 Javascript 的参数。

inspect 只适合偷懒用,毕竟 inspect 的格式并不保证不会变,也许 Ruby 下一般换个更漂亮的方式显示 inspect 结果,这招就不灵了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter