RJS 最方便的事情之一是它能够呈现部分,因此您可以将所有 View 代码集中在一个地方:
# task/index.html.erb
<ul id="task_list">
<%= render :partial => 'task', :collection => @tasks %>
</ul>
# task/_task.html.erb
<li>
<% if task.is_completed %>
<%= task.name %> - <%= task.completed_date %>
<% else %>
<%= task.name %> - UNCOMPLETED
<% end %>
...
</li>
现在我试图摆脱 RJS,让服务器以一个小的、格式良好的 JSON 响应,而不是一大块 JS + HTML。
有没有办法让 保持我的部分文件和代码不变而不会重复 并且能够在不使用 RJS 的情况下通过 JS 将新项目添加到任务列表中?我研究了一些 javascript 模板引擎,但它们都要求我维护一个单独的 ruby 部分和一个 javacript 模板。
最佳答案
jQuery 1.4.3 将包含 tmpl 插件(直接集成到 jQuery 中)
参见 ojitos
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://nje.github.com/jquery-tmpl/jquery.tmpl.js"></script>
</head>
<body>
<ul id="movieList"></ul>
<script>
var movies = [
{ Name: "The Red Violin", ReleaseYear: "1998" },
{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
{ Name: "The Inheritance", ReleaseYear: "1976" }
];
var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";
/* Compile the markup as a named template */
$.template( "movieTemplate", markup );
/* Render the template with the movies data and insert
the rendered HTML under the "movieList" element */
$.tmpl( "movieTemplate", movies )
.appendTo( "#movieList" );
</script>
</body>
</html>
关于不带 RJS 的 Javascript 模板,带 JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2993620/