此代码在将coffee_input哈希传递给coffeescript代码的视图中正常工作
#if coffee_input?
if typeof coffee_input isnt "undefined"
mydata = JSON.parse coffee_input
for p in mydata by 1
if $('#'+p.name).length
.. do stuff
但在其他页面上,我一直在浏览器中收到此错误:
TypeError: 'undefined' is not an object (evaluating 'mydata.length')
虽然我正在使用typeof coffee_input isnt undefined
我不明白。
编辑: 来自View的代码:
= javascript_tag do
window.coffee_input = '#{raw @js.to_json}';
来自控制器的 @js
是:
@js = []
@js_hash = {"name" => p.name, "hosts" => "", "services" => ""}
@js << @js_hash
答案 0 :(得分:0)
解决方案:我查看了浏览器中生成的Javascript
(function() {
jQuery(function() {
var context, g, metrics, mydata, overall, pod, _i, _len, _results;
if (typeof coffee_input !== "undefined" && coffee_input !== null) {
mydata = JSON.parse(coffee_pods);
_results = [];
} // WRONG!!!!!!!!!!!!!!!
for (_i = 0, _len = mydata.length; _i < _len; _i += 1) {
…..
由于某些未知原因,它将大括号放在if的末尾而不是for循环的末尾。
我只是重写了它,间距是正确的,如果不是咖啡脚本就会抱怨。