在模板中渲染rails表单

时间:2014-10-03 11:23:15

标签: ruby-on-rails forms templates

我试图在骨干模板中渲染表单,

template: _.template(
  '<li><%= form_for :movie, url: movie_path do |f| %><% end %></li>'
),

但它在Chrome控制台中给我以下错误。

Uncaught SyntaxError: Unexpected token : 

可能是因为我在这种情况下使用erb代码,有没有人知道解决方案?

1 个答案:

答案 0 :(得分:1)

我有种感觉这与代码有关&#34;或者&#39;导致问题的原因是,我建议使用Firebug(Firefox插件)来调试代码,因为IMO比Chrome控制台更适合调试HTML和JS。

一般来说,在模板JS中包含ERB代码并不是那么好,我建议通过以下方式解决这个问题:

不要使用默认的下划线插值,因为很容易将它与ERB代码混合使用,而ERB代码也需要不同的ERB代码。我用:

Backbone.$ = $;  // I have no idea why backbone complains about that stuff, but this thing solves the problem.
_.templateSettings = {
  interpolate: /\$\{\{(.+?)\}\}/g,
  escape: /\%\{\{(.+?)\}\}/g,
  evaluate: /\{\{(.+?)\}\}/g
};  // set template interpolation settings

您可以按照自己的方式设置这些选项

制作一个普通的HTML部分,并将其中的内容包装在模板代码中,如下所示:

<script id="something_template" type="text/template">
  <li><%= form_for :movie, url: movie_path do |f| %><% end %></li>
</script>

注意:不要混淆ruby代码&lt;%=%&gt;和主干JS代码%{{}}

使用javascript渲染此部分,我建议在骨干视图类的渲染方法

render: function () {
  $("#container").empty();
  $(_.template($("#something_template").html(), { 
    // variables go here
  })).appendTo("#container");
}

希望这个提示可以帮助您解决问题。我只能说它适用于我的项目。