我正在经历学习骨干的过程,并且不了解所有语法。下面我介绍了一些我一直在学习骨干的代码,所以我可以在这个问题中引用它。虽然我得到了大部分骨干的工作原理,但我并不完全理解一些代码中一些标记背后的含义。 BackBone的文档来源充其量是最少的。我得到它的90%但是我没有得到的语法是下划线'_'真正提供什么以及何时使用它。例如下面有一些代码在“.bindAll(....”中使用下划线。当然我确实理解绑定是什么。只是不确定何时使用下划线以及标记起什么作用。另一个例子是当下划线显示在下面的'(this.collection.models).each(function(item)...'代码之前。我得到代码正在循环但是为什么他们使用下划线标记。感谢您的帮助
(function($){
var Item = Backbone.Model.extend({
defaults: {
part1: 'hello',
part2: 'world'
}
});
var List = Backbone.Collection.extend({
model: Item
});
var ListView = Backbone.View.extend({
el: $('body'),
events: {
'click button#add': 'addItem'
},
initialize: function(){
_.bindAll(this, 'render', 'addItem', 'appendItem'); // remember: every function that uses 'this' as the current object should be in here
this.collection = new List();
this.collection.bind('add', this.appendItem); // collection event binder
this.counter = 0;
//once the object is initialized, render the page.
this.render();
},
render: function(){
var self = this;
$(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
self.appendItem(item);
}, this);
},
addItem: function(){
this.counter++;
var item = new Item();
item.set({
part2: item.get('part2') + this.counter // modify item defaults
});
this.collection.add(item); // add item to collection; view is updated via event 'add'
},
appendItem: function(item){
$('ul', this.el).append("<li>"+item.get('part1')+" "+item.get('part2')+"</li>");
}
});
var listView = new ListView();
})(jQuery);
答案 0 :(得分:3)
Underscore只不过是一个高效的跨浏览器的实用程序/有用函数集合。下划线的每个函数都以下划线字符_
开头(因此命名为Underscore)。
(强调我的)
Underscore是一个用于JavaScript的实用程序带库,它提供了一个 很多你期望的功能性编程支持 Prototype.js(或Ruby),但是没有扩展任何内置的 JavaScript对象。这是与jQuery的礼服一起使用的关系 Backbone.js的吊带。
骨干网也可以拥有自己的一套功能,但由于需要的实用功能已经存在于Underscore中,因此它们被骨干使用。换句话说,Backbone与Underscore结合使用,可为编程/功能需求提供更多功能和灵活性。
请注意,Backbone和Underscore都是由同一作者撰写的。
详细了解文档:
答案 1 :(得分:0)
最好将下划线视为或多或少的方便实用程序功能的命名空间。他们只是使用下划线来防止污染全局命名空间。
有关此信息的更多信息,最好阅读文档:underscore
特别是,您似乎注意到的用法是chaining
答案 2 :(得分:0)
Underscore本身就是一个库,Backbone恰好在其源代码中使用。它的API完全包含在_
命名空间中,一个对象。
Underscore主要关注JavaScript在数据级别的原生API的扩展。也就是说,对于数组交叉的方法比对DOM操作(即jQuery专门研究的)更感兴趣。
它还有一个模板系统,这是Backbone使用的其他功能。
答案 3 :(得分:0)
Underscore.js
是由Backbone.js
的创建者DocumentCloud编写的javascript实用程序库。
它可以作为Backbone.js之外的可分发的,这就是为什么它有自己的命名空间。
它通过为各种功能语言结构提供接口来帮助开发人员,这些结构不一定是所有浏览器本身都支持的。
例如:
bindAll_.bindAll(object, [*methodNames])
将methodNames指定的对象上的多个方法绑定到 无论何时调用它们,都要在该对象的上下文中运行。非常 方便用于将用作事件的绑定函数 处理程序,否则将被调用相当无用的。 如果没有提供methodNames,则为对象的所有功能 属性将绑定到它。