Ruby on rails ruby无法在.js.coffee for ajax响应中找到coffeescript
我使用的是Rails 3.1,在我的Ruby on rails ruby无法在.js.coffee for ajax响应中找到coffeescript,ruby-on-rails,ruby-on-rails-3,coffeescript,erb,actionview,Ruby On Rails,Ruby On Rails 3,Coffeescript,Erb,Actionview,我使用的是Rails 3.1,在我的create_error.js.coffee查看AJAX响应文件中的CoffeeScript语句之后,似乎无法使用Ruby脚本 如果我这样做,它将工作: <% if @attached_image.errors.any? %> alert 'something is wrong' <% end %> 提醒“出了问题” 但是如果它与下面类似,在CoffeeScript语句之后加上一个 errors_block = '<di
create_error.js.coffee
查看AJAX响应文件中的CoffeeScript语句之后,似乎无法使用Ruby脚本
如果我这样做,它将工作:
<% 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 %>
错误\u块=“”
某物
我总是会在if
行中得到一个异常ActionView::Template::Error(第6行的解析错误:意外的“缩进”)
。我尝试了几个示例,每次ruby
出现在coffeescript语句之后时都会出现这种情况
为什么会这样?您的文件应该被调用:
create_error.js.coffee.erb
所以你可以在上面添加ruby。听起来你的post ERB CoffeeScript中遇到了缩进问题。鉴于此:
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something...
<% end %>
这个缩进开始了一个新的块,在这个上下文中没有意义;因此,CoffeeScript编译器出现了“意外的“缩进”错误。您可以在中看到这一点
CoffeeScript对缩进非常敏感,所以像这样混合ERB和CoffeeScript不是个好主意。您最好将@附加的\u image.errors
放入CoffeeScript变量,然后在CoffeeScript中执行逻辑,类似这样的操作(未测试的代码):
但这更难读,你会忘记的。您最好使用ERB生成CoffeeScript数据,并让CoffeeScript处理逻辑。我昨天发现了这一点,它告诉我使用js.coffee(没有ERB部分),并且它实际上与ruby代码部分配合得很好,只是如果CoffeeScript语句之一之后出现
,那么CoffeeScript处理器将无法通过。但它的工作方式正好相反,或者介于两者之间。我将对问题进行编辑以使其更清楚。嗨,穆,我试图使用error\u msgs=
,但我得到ActionView::Template::error(第1行的保留字“var”)
。有什么我又做错了吗?尝试添加一个html\u-safe
以防止它对引号进行编码,请查看我的更新。hi mu,如果我添加html\u-safe,则:或[]和{}将被html编码删除,然后字符串不再是json字符串,但我受到您的启发并回答了我自己的问题。@larryzhao:只需添加html\u safe
就可以了(至少对我来说是这样)。
errors_block = '<div id="errors_block"></div>'
something...
errors = <%= @attached_image.errors.to_a.to_json.html_safe %>
errors_block = '<div id="errors_block"></div>'
if errors.length > 0
something...
errors_block = '<div id="errors_block"></div>'
<% if @attached_image.errors.any? %>
something..
<% end %>