在Backbone和Handlebars的模型中循环一个数组

时间:2013-11-17 22:21:37

标签: javascript backbone.js

我正在开发一个带有骨干和把手的应用程序,用于我所在城市的巴士时刻表。一站式的模型是:

    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感谢您的建议

2 个答案:

答案 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/#templatehttp://underscorejs.org/#each

如果您使用的是require.js,则可以下载名为text的插件!

这允许您在依赖项中定义HTML文件,并使模板驻留在各自的文件中。这与上述方法相反,该方法使用嵌入式脚本标记和jquery从您正在使用的任何视图中获取模板。

请参阅plugins / text @ http://requirejs.org/docs/download.html