我有这个小代码:
ScenesController.prototype.viewAction = function() {
this.flash = this.di.HelperFlash.hasSupport();
this.$playerElem = !this.flash? $('#html_player') : $('#flash_player');
// the first click is just a sample, I need the same object in the Quailty Change method
$('.scenes_view_video_quailty').on('click', function() { echo($(this));});
$('.scenes_view_video_quailty').on('click', this.viewVideoQuailtyChange.bind(this));
};
ScenesController.prototype.viewVideoQuailtyChange = function(e) {
e.preventDefault();
if (!this.flash) {
echo(this);
echo($(this));
}
};
当我点击链接时,我需要将此变量传递给QualityChange方法。一个是对象(在绑定中),另一个是click事件,因为我也需要单击的元素。
我正在尝试使用.on('点击',{$ this:$(this)},this.method)解决方案,但是选择了工作,evend.data。$这看起来是另一个不同的对象。
我需要与第一次单击方法中相同的对象。 (echo = console.log)
答案 0 :(得分:3)
将引用当前实例的this
别名(传统上为self
)并使用this
来引用所单击的元素
ScenesController.prototype.viewAction = function() {
var self = this;
this.flash = this.di.HelperFlash.hasSupport();
this.$playerElem = !this.flash? $('#html_player') : $('#flash_player');
$('.scenes_view_video_quailty').on('click', function() { echo(self, $(this));});
};
要调用方法设置this
引用,您可以使用Function.apply
,例如:
$('.scenes_view_video_quailty').on('click', function(){
self.viewVideoQuailtyChange.apply(self, [$(this)])
});
答案 1 :(得分:0)
您可以使用bind
附加任意数量的变量
你可以有一个合适的方法,如:
ScenesController.prototype.viewVideoQuailtyChange = function(secondThis) {
}
然后使用bind作为:
this.viewVideoQuailtyChange.bind(this, $(this));
使用此解决方案,您确实会丢失事件,因此可能需要更多考虑。我将调查并更新答案:)