0

我用 HAML 替换了我的 ERB 文件,效果很好。但是,我有一些复杂的混合 javascript 和 erb 代码,在转换为 haml 时会失败。我知道绕过 haml 的 ":plain" 选项,但是当我使用下面的代码执行此操作时,erb 代码只是打印为文本,而不是解释。各位有什么解决办法吗?

在 JS 中用 HAML 替换 ERB 失败

  - if (@active == "tasks")
    :plain
      $('#content_output').html("<div class='content_title task'></div><h3><%= I18n.t :task_all %></h3><%= escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal')) %></div>");
      $('#content_input').html("<div class='content_title task'></div><h3><%= I18n.t :task_new_title %></h3><%= escape_javascript(render('tasks/new_task')) %></div>");
      $('a#tasks_tab').addClass('active');

这是原始的 js.erb 代码:

    <% if (@active == "tasks") %>
        $('#content_output').html("<div class='content_title task'></div><h3><%= I18n.t :task_all %></h3><%= escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal')) %></div>");
        $('#content_input').html("<div class='content_title task'></div><h3><%= I18n.t :task_new_title %></h3><%= escape_javascript(render('tasks/new_task')) %></div>");
        $('a#tasks_tab').addClass('active');
    <% end %>
4

2 回答 2

1

假设您的文件扩展名为js.haml,我认为您需要做的就是将您的<%= ... %>标签更改为标准字符串插值标签#{ ... }

- if (@active == "tasks")
  :plain
    $('#content_output').html("<div class='content_title task'></div><h3>#{I18n.t :task_all}</h3>#{escape_javascript(render('tasks/all_tasks', :tasks => @contact_tasks, :layout => 'normal'))}</div>");
    $('#content_input').html("<div class='content_title task'></div><h3>#{I18n.t :task_new_title}</h3>#{escape_javascript(render('tasks/new_task'))}</div>");
    $('a#tasks_tab').addClass('active'); 
于 2012-08-07T10:09:26.093 回答
0

尝试使用:javascript而不是:plain

顺便说一句,在 Rails 3 中,您应该使用不显眼的 javascript (UJS)。查看一些教程:http ://railscasts.com/episodes/205-unobtrusive-javascript

于 2012-08-07T08:17:25.907 回答