我正在按照我在BackboneJs找到的here找到的教程。
在render
方法的大约一半时间,他执行以下操作:
events: { 'click button#add': 'addItem' },
initialize: function () {
this.collection = new List();
// Collection event binder
this.collection.bind('add', this.appendItem);
this.counter = 0;
this.render();
},
render: function () {
this.el.append("<button id='add'> Add List Item</button>");
this.el.append("<ul></ul>");
_(this.collection.models).each(function(item){
// in case collection is not empty
appendItem(item);
}, this);
},
addItem: function () {
var item = new Item();
this.counter++;
item.set({
part2: item.get('part2') + " " + this.counter
});
this.collection.add(item);
},
appendItem: function (item) {
$('ul').append('<li>' + item.get('part1') + " " + item.get('part2') + '</li>');
}
我对下面这一行有几个问题。
_(this.collection.models).each(function(item){
// in case collection is not empty
appendItem(item);
}, this);
在这种情况下,下划线_
做了什么?
为什么这甚至需要?
评论说如果集合不是空的。但是没有那条线就可以了。 bind
函数中的initialize
覆盖告诉Backbone在集合上触发this.appendItem
事件时运行add
,或者我通过删除行来确认并确认问题
答案 0 :(得分:2)
我认为这种方法通常将数组包装在“下划线”辅助类中,以使其能够访问所有的underscore.js辅助方法。在这种情况下,.each方法来自下划线帮助程序类。
但是,就像你说的那样,如果没有它,这应该可行。可能是本教程编写的主干版本(v0.3.3)要求对模型数组的_方法进行迭代。underscore.js(http://documentcloud.github.com/underscore/)的文档讨论了如何使用_()作为方法调用,而不是在面向对象的mannter中使用库。