Javascript 从子方法访问父对象
我的主要观点如下:Javascript 从子方法访问父对象,javascript,backbone.js,this,Javascript,Backbone.js,This,我的主要观点如下: var myView = Backbone.View.extend({ bar: 1, open: function() { $(window).on('resize', this.resizeHandler); }, close: function() { $(window).off('resize', this.resizeHandler); }, resizeHandler: func
var myView = Backbone.View.extend({
bar: 1,
open: function() {
$(window).on('resize', this.resizeHandler);
},
close: function() {
$(window).off('resize', this.resizeHandler);
},
resizeHandler: function(e) {
alert(this.bar);
}
});
resizeHandler方法中的this.bar失败,因为“this”不再是对父对象的引用,而是对与事件相关的event/html元素的引用
我如何才能让它工作,使resizeHandler有一个对父对象的引用,而我仍然有一个对一个函数的引用,我可以在jQueryOn和off方法中使用这个函数
谢谢。您试过使用
bind
()吗
例如:
$(window).on('resize', _.bind( this.resizeHandler, this ) );
正如在报告中所说的那样
也许最常见的JavaScript“gotcha”是这样一个事实
当您将函数作为回调传递时,其this
的值将丢失。使用主干,在处理事件和回调时,您通常 发现依赖和来自下划线.js很有用 解决问题的最简单方法可能是使用
还有一个演示(我建议避免使用
alert
来调试代码,尤其是在跟踪鼠标移动/调整大小事件时)\u Nikosh建议的bindAll更适合我的特殊用途,但是感谢您的帮助。在此上下文中,.bind
的一个问题是,您必须将.bind
返回值存储在某个位置,以便$(窗口)。关闭(…)
它,.bindAll
为您替换此.resizeHandler
,这样问题就不会出现。
var myView = Backbone.View.extend({
bar: 1,
initialize: function() {
_.bindAll(this, 'resizeHandler');
},
open: function() {
$(window).on('resize', this.resizeHandler);
},
close: function() {
$(window).off('resize', this.resizeHandler);
},
resizeHandler: function(e) {
console.log(this.bar);
}
});