将事件绑定到对象内的函数

时间:2016-03-14 02:23:23

标签: javascript jquery signalr

我遇到了jQuery / JS的一个特殊问题。

我正在开发一个JS文件,让我为客户端站点创建portlet。我正在使用SignalR向用户传达更改。

下面这段代码让我有点担心它为什么不能工作。

Eenheden: function (poPortlet) {
        this.moPortlet = poPortlet;
        this.Init = function () {
           $(this.moPortlet).find('.portlet-title').text($(this.moPortlet).attr('data-cpv-type') + ' Eenheden')
        };
        this.BindHub = function () {
           CPV.moHub.on('onEenheidUpdate', this.Events.Update);
        };
        this.Events = {
           Update: function (pnId, psStatus) {
              CPV.Log('Error', 'Update: ' + pnId + ' ' + psStatus);
           }
        };
     }

我正在尝试在this.Events.Update事件SignalR上绑定函数onEenheidUpdate。这些Eenheiden对象的实例在页面上不是唯一的。这个想法是它们包含相同的数据,但可以过滤,根据一些配置创建不同的portlet。

我的问题是onEenheidUpdate函数没有触发正确的事件。我想这样做,所以我可以使用我为唯一对象设置的引用,例如我在初始化时设置的jQuery对象。

1 个答案:

答案 0 :(得分:2)

问题

你的问题是,当jQuery或javascript通常触发事件回调时," context" (scale_shape_discrete(name ="modified A4", breaks=c("1", "2"), labels = c("one","two"))的值)已更改。例如

this

Function.prototype.bind救援!

var MyModule = {
    init: function () {
        $('.amazing-element').on('click', function () {
            // This breaks because `
            // `this` is not MyModule
            // When the callback is triggered
            // `this` is `<p class="amazing-element"></p>`
            this.onClick()
        })
    },
    onClick: function () {
        console.log('wee, I was clicked')
    }
}

所以你的确切例子如下:

var MyModule = {
    init: function () {
        $('.amazing-element').on('click', function () {
            this.onClick()
        }.bind(this))
        // ^ here we bind the context of the callback to the
        // correct version of `this`.
    },
    onClick: function () {
        console.log('wee, I was clicked')
    }
}