我正在阅读如何使用Backbone.js,但与最新版本的Backbone库相比,似乎所有在线提供的文章都已过时了?这没有用!
我已经看过nettuts的一篇文章(首先在谷歌搜索结果中)进入关于使用Backbone.Controller
的讨论,但是已经从Backbone中删除了,因此很难发现。
但无论如何,我的问题是关于Backbone中的事件对象。
使用“查看”,您可以执行...
var ContactsView = Backbone.View.extend({
initialize: function(){
console.log('View initialized');
},
events: {
'change select': 'displaySelected'
},
displaySelected: function (event) {
console.log('get model data and display selected user', event);
}
});
...但是你不能将events
属性与Collection
一起使用,而是需要在initialize
方法中使用jQuery的bind方法......
var Contacts = Backbone.Collection.extend({
model: Contact,
initialize: function(){
this.bind('add', this.model_added, this);
},
model_added: function(){
console.log('A new model has been created');
}
});
......首先,这是为什么?
但更重要的是第3个参数this
是什么?我在jQuery文档中查找了bind
(因为在Backbone站点上没有提到bind
)并且它没有第三个参数?
答案 0 :(得分:2)
1)Backbone.Controller
未被移除,已重命名为Backbone.Router
,在手册旁边您可以查看Change Log
2).bind
已重命名为.on
,您可以检查context
中{3}}中的第3个参数(Backbone
)来自_.bindAll
Backbone documentation的Underscore
this
将events
分配给您指定的所有功能。
3)View
内的.bind
是侦听DOM事件(click,mouseover,mousedown等)的东西,当然你会知道触发了哪个DOM元素,{{1}或者说.on
在调用.trigger
时执行某些操作,整个Backbone代码都充满了自定义触发器,因此,如果您愿意,可以通知model.add,model.remove ,collection.reset等。同时检查documented here
答案 1 :(得分:2)
第三个参数是可选的 - 它提供了一种将上下文传递给处理函数的方法。
在JavaScript中,this
是上下文的 - 它可以并且将根据您所在的对象而改变。通过将this
传递给可选的context
参数,您将传递绑定事件的对象的范围。这样做可以让您在处理程序中使用相同的上下文。