我遇到了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对象。
答案 0 :(得分:2)
你的问题是,当jQuery或javascript通常触发事件回调时," context" (scale_shape_discrete(name ="modified A4", breaks=c("1", "2"), labels = c("one","two"))
的值)已更改。例如
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')
}
}