Общий подход выглядит хорошо и, возможно, в некоторых случаях, возможно, немного лучше, чем то, что я делал раньше.
Тем не менее, мне кажется, что вы фактически выводите версию JS в div, а затем передаете ее в шаблон прототипа. Шаблон также принимает строку, так что вы можете просто передать ей необработанный шаблон js. Если я что-то не упустил, div #template сам по себе не нужен. Таким образом, строковый маршрут, вероятно, лучший путь.
Из Rails это, вероятно, будет выглядеть примерно так:
<script type="text/javascript">
var raw_template = "#{escape_javascript(render(:partial => 'template', :locals => { :jsmode => true }))}";
var output = new Template(raw_template).evaluate({value1: '111', value2: '222'});
// Do something with the output
</script>
escape_javascript
использует следующую карту:
JS_ESCAPE_MAP = {
'\\' => '\\\\',
'</' => '<\/',
"\r\n" => '\n',
"\n" => '\n',
"\r" => '\n',
'"' => '\\"',
"'" => "\\'" }
Это означает, что, учитывая предложенный вами шаблон, вы должны получить результат в виде:
var raw_template = "<div class=\"object_template\">\n<div>#{value1}<\/div>\n<div>#{value2}<\/div>\n<\/div>";
Что должно хорошо сработать.