无法在coffeescript内部渲染coffeescript

时间:2011-12-06 19:09:58

标签: ruby-on-rails-3.1 rendering coffeescript partials

我想创建一个可以在页面加载(使用AJAX)后调用的通用控制器,并根据控制它的控制器更新页面上的不同内容。

目的是允许更好的页面和片段缓存,同时为用户显示自定义元素。

我的框架看起来像这样:

controllers/general_ajax_controller.rb
views/general_ajax/on_page_load.js.coffee
                 ./_update_some_stuff.js.coffee

控制器中的on_page_load动作处理逻辑,确定要加载哪些部分,视图将呈现部分。

on_page_load.js.coffee视图中,我有此代码(简化):

<%= render "update_some_stuff" %>

应该呈现部分。相反,我得到了这个错误:

  ActionView::Template::Error (SyntaxError: Reserved word "function" on line 2):
  app/views/general_ajax/on_page_load.js.coffee:1:in `_app_views_general_ajax_on_page_load_js_coffee___2304196970850216490_70321203283120'

我认为coffeescript是在将其包含在视图中之前编译的(这是咖啡并且不支持编译的js)

如果我将on_page_load视图的扩展名更改为.js.erb,那么就可以。 (奇怪的是,我必须在它运行之前重启我的服务器,你知道为什么吗?)

您认为这是coffeescript中的问题还是不好的做法因此不受支持?

作为一个侧面讨论,您如何看待我对动态描述的方法?

2 个答案:

答案 0 :(得分:5)

一种解决方案是将原始解析的javascript嵌入到视图中。

注意后面的滴答声(它告诉coffeescript这是原始的javascript)并使用raw()来撤消HTML渲染部分的转义。

`
<%= raw(render("update_some_stuff")) %>
`

答案 1 :(得分:2)

那是因为_update_some_stuff.js.coffee被解释并转换为Javascript。当它插入on_page_load.js.coffee时会引发错误,因为vanilla Javascript代码在Coffee-Script文件中不兼容(在这种情况下为function关键字)。