ruby无法在.js.coffee中使用coffeescript来实现ajax响应
我正在使用Rails 3.1,似乎我无法在为我的create_error.js.coffee
视图文件中的CoffeeScript语句使用AJAX响应后使用Ruby脚本。ruby无法在.js.coffee中使用coffeescript来实现ajax响应
如果我不喜欢这样它会工作:
<% if @attached_image.errors.any? %>
alert 'something is wrong'
<% end %>
但如果是像下面,用CoffeeScript的发言后<% %>
,
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something..
<% end %>
我总是支持得到一个异常的if
行上的ActionView::Template::Error (Parse error on line 6: Unexpected 'INDENT')
。我已经尝试了几个样本,每次发生在coffeescript语句后出现红宝石<% %>
时。
这是为什么?
听起来就像您在ERB后CoffeeScript中遇到缩进问题。鉴于这种:
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something...
<% end %>
输出看起来像这样当if
条件为真:
errors_block = '<div id="errors_block"></div>'
something...
和缩进开始一个新块没有意义在这方面;因此CoffeeScript编译器出现“Unexpected'INDENT'”错误。您可以在this snippet on coffeescript.org中看到此操作。
CoffeeScript对缩进非常敏感,因此混合ERB和CoffeeScript并不是一个好主意。你会更好把@attached_image.errors
到CoffeeScript的变量,然后做逻辑的CoffeeScript,更多的东西像这样(未测试的代码):
errors = <%= @attached_image.errors.to_a.to_json.html_safe %>
errors_block = '<div id="errors_block"></div>'
if errors.length > 0
something...
错误数组的JSON版本应该是有效的CoffeeScript所以errors
会成为一个CoffeeScript数组。 to_a
有errors
返回nil
,我不知道如果errors.nil?
是可能的,但我不知道我的头顶,但一点额外的偏执狂从未伤害任何人。
你也可以这样做:
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something..
<% end %>
但这是难以阅读,你会忘记。您最好使用ERB生成CoffeeScript数据并让CoffeeScript处理逻辑。
你的文件应该被称为:
create_error.js.coffee.erb
所以,你可以在上面添加红宝石。
昨天我发现这个https://github.com/rails/coffee-rails/issues/13,它告诉我使用js.coffee(没有erb部分),它实际上工作得很好,使用ruby代码部分,只有在咖啡陈述之后有''这个咖啡处理器才会通过。但它可以在其他方面或其他方面起作用。我将编辑这个问题以使其更清楚。 – larryzhao 2012-02-02 14:54:24
您的回答非常完美! – larryzhao 2012-02-04 05:23:57
嗨,我尝试使用'error_msgs = '但我得到了'ActionView :: Template :: Error(保留字“var”在第1行)''。有什么我再次做错了吗? – larryzhao 2012-02-04 14:40:36
尝试添加'html_safe'以防止对引号进行编码,请参阅我的更新。 – 2012-02-04 18:18:23