我正在开发一个带有骨干和把手的应用程序,用于我所在城市的巴士时刻表。一站式的模型是:
define(["jquery", "underscore", "backbone"],
function ($, _, Backbone){
var stop = Backbone.Model.extend({
defaults : {
id : "23",
lon : "43,465187",
lat : "-80,522372",
listabus : ["80", "83", "106"]
}
});
return stop;
});
其中“Listabus”是通过第23号站附近的所有公共汽车的列表。我不知道如何在模板中循环数组......帮助我! :D感谢您的建议
答案 0 :(得分:2)
这是你的HTML:
<!-- below is your template !-->
<script id="bus-stops" type="text/x-handlebars-template">
<ul>
{{#each stops}}
<li>{{this}}</li>
{{/each}}
</ul>
</script>
<!-- result container !-->
<div id="result"></div>
和js代码
var BusStop = Backbone.Model.extend(),
busStop = new BusStop({stops: ['a', 'b', 'c']});
template = $('#bus-stops').html(),
compiler = Handlebars.compile(template),
html = compiler({stops: busStop.get('stops')});
$('#result').html(html);
抱歉jsfiddle无法使用把手
答案 1 :(得分:1)
您只需将模型属性作为对象传递到下划线模板函数中。第一个参数是模板,第二个参数是您的数据。你可以传入任何对象数据,但由于显而易见的原因,下划线对于model.toJSON()起到了很好的作用。
this.$('#insertWherever').html(_.template($('#busList'), stopModel.toJSON()));
你的模板看起来像这样。
<script id="busList" type="text/html">
<ul>
<% _.each(listabus, function(busNumber){ %>
<li><%= busNumber %></li>
<% }); %>
</ul>
</script>
总而言之,<% %>
是一种逃避和运行任意JS代码的方法。
<%= %>
是一种在您的模板中插入或输出内容的方法。
请参阅http://underscorejs.org/#template和http://underscorejs.org/#each
如果您使用的是require.js,则可以下载名为text的插件!
这允许您在依赖项中定义HTML文件,并使模板驻留在各自的文件中。这与上述方法相反,该方法使用嵌入式脚本标记和jquery从您正在使用的任何视图中获取模板。
请参阅plugins / text @ http://requirejs.org/docs/download.html