似乎无法将功能绑定到骨干网中的视图.js
Cannot seem to bind function to view in backbone.js
我想将checkScroll()
绑定到视图PhotoListView
,以便我可以从$(Window).scroll()
内部调用this.checkScroll()
,而无需先var self = this
然后调用self.checkScroll()
。
问题:但是绑定似乎不起作用,我收到错误Uncaught TypeError: Object [object Window] has no method 'checkScroll'
我是否绑定错误?
视图
PhotoListView = Backbone.View.extend({
el: '#photo_list',
initialize: function() {
_.bindAll(this, 'checkScroll');
this.bind('checkScroll', this)
$(window).scroll(function() {
this.checkScroll();
});
},
checkScroll: function() {
console.log('checkScroll');
}
});
是的,试试这个:
initialize: function() {
_.bindAll(this, 'checkScroll');
$(window).scroll(this.checkScroll)
},
_.bindAll
将采用this.checkScroll
并将其上下文固定为 this
,因此您可以直接将其作为处理程序传递。但是你通过使用匿名函数把它扔掉了。
请注意,"绑定"有 2 个不同的概念:
- 将函数绑定到对象,以便无论如何调用该函数,它都将具有固定的
this
值 - 将处理程序附加到元素的事件
_.bindAll
前者。
JSFIDDLE 演示
尝试:
var view = this; //add this
$(window).scroll(function() {
view.checkScroll(); //change "this" to "view"
});
代码的实际问题是丢失this
上下文。通过删除内联函数并提供对该函数的直接引用,您可以避免在闭包上丢失上下文。
但是,如果您仍想使用内联函数或执行一系列函数,您仍然可以使用相同的代码,使用公开适当上下文的代理包装函数。
您必须代理函数并为其提供适当的范围:
使用下划线:
$(window).scroll(_.bind(function() {
this.checkScroll();
this.anotherFunction();
},this));
使用 jQuery:
$(window).scroll($.proxy(function() {
this.checkScroll();
this.anotherFunction();
},this));
相关文章:
- 如何使用javascript从主svg对象动态创建svg视图框
- 正在使用$location.path(.)路由ng视图
- angular.js没有'无法在PhoneGap中处理视图标记
- 如何包含特定于每个视图angularjs的javascript文件
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- Ajax Live搜索发布到Laravel视图
- backbone.js无法渲染视图
- 根据某些条件在视图之间切换
- ng视图外的链接重定向到ng视图内的页面
- 如何在Jquery中发布后将值从视图返回到控制器
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 使用Scala Play Framework视图中的键检索映射值
- FF视图源|脚本高亮显示为红色
- 如何使bxslider仅在移动视图中处于活动状态
- 似乎无法将功能绑定到骨干网中的视图.js
- 在骨干网中更改视图的模型.js
- 按查询字符串值显示骨干网渲染视图
- 骨干网-访问集合在视图中
- 子类a骨干网.视图子类&保留的事件