Рендеринг рельсов в шаблоне

Я пытаюсь сделать форму в базовом шаблоне,

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

Но это дает мне следующую ошибку в консоли Chrome.

Uncaught SyntaxError: Unexpected token :

Вероятно, потому, что я использую код erb в этом контексте, кто-нибудь знает решение?

1 ответ

У меня такое чувство, что это связано с тем, что код "или" вызывает эту проблему. Я предлагаю использовать Firebug (плагин Firefox) для отладки кода, поскольку IMO лучше подходит для отладки HTML и JS, чем Chrome консоль.

Как правило, не очень хорошо иметь код ERB внутри шаблона JS, я предлагаю решить это, сделав это следующим образом:

Не используйте интерполяцию по умолчанию Underscore, так как ее легко смешивать с кодом 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 и содержите внутри него, заключенного в код шаблона, например:

Примечание: не смешивайте код ruby <% =%> и базовый код JS% {{}}

Извлеките это частично с помощью javascript, я предлагаю в методе рендеринга класса базового вида

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

Надеюсь, этот совет поможет вам решить вашу проблему. Я могу только сказать, что это работает для моих проектов.

licensed under cc by-sa 3.0 with attribution.