[英]Binding events to functions within objects
一般来说,我正在遇到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);
}
};
}
我正在尝试将SignalR
事件onEenheidUpdate
绑定到this.Events.Update
函数。 这些Eenheiden
对象的实例在页面上不是唯一的。 想法是它们包含相同的数据,但可以进行过滤,根据某些配置创建不同的portlet。
我的问题是onEenheidUpdate
函数不会触发适当的事件。 我想这样做,以便可以使用为唯一对象设置的引用,例如在初始化时设置的jQuery对象。
您的问题是,当jQuery或javascript通常触发事件回调时,“上下文”( this
值)将被更改。 例如
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')
}
}
因此,您的确切示例如下所示:
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.bind(this));
// ^ change here
};
this.Events = {
Update: function (pnId, psStatus) {
CPV.Log('Error', 'Update: ' + pnId + ' ' + psStatus);
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.