从子方法访问父对象

Accessing parent object from child method

本文关键字:对象 访问 子方法      更新时间:2023-09-26

我有一个骨干视图,如下所示:

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);
    }
});

this.bar resizeHandler 方法中失败,因为"this"不再是对父对象的引用,而是对与事件相关的 event/html 元素的引用。

我怎样才能让它工作,以便 resizeHandler 具有对父对象的引用,并且我仍然具有对可以在 Jquery on 和 off 方法中使用的函数的引用?

谢谢。

如常见问题解答中所述,条目绑定"this"

也许最常见的JavaScript"陷阱"是 将函数作为回调传递时,其this值将丢失。
使用Backbone,在处理事件和回调时,您经常会 发现依赖 Underscore.js 中的 _.bind 和 _.bindAll 很有用。

解决问题的最简单方法可能是使用 _.bindAll

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);
    }
});

还有一个演示 http://jsfiddle.net/nikoshr/DZqDw/(我建议避免alert调试代码,尤其是当您跟踪鼠标移动/调整大小事件时)

你试过bind (http://backbonejs.org/#FAQ-this) 吗?

例如:

$(window).on('resize', _.bind( this.resizeHandler, this ) );