我正在尝试使用 Backbone 事件扩展现有的 jQuery 小部件,以便它们可以发布可以收听的 Backbone 事件。我的策略是在小部件的本机事件回调方法中代理事件。例如,在 jQueryUI 滑块小部件的更改事件中,我想触发一个名为“触发器”的事件。我的难题是此代码按预期工作:
$(function() {
var $slider = $("#slider");
_.extend($slider, Backbone.Events);
$slider.on("trigger", function(msg){
alert("triggered: " + msg)
});
$slider.slider({
change: function(event, ui) {
$slider.trigger("trigger", ui.value);
}
});
});
这是我想去的地方的 3/4,但我希望能够在 change 事件中做这样的事情:
change: function(event, ui) {
$(this).trigger("trigger", ui.value);
}
...完全封装小部件,而不用担心小部件的实际单例实例。我的问题是第二种方法不起作用,我想知道是否有人可以向我解释原因。在 Firebug 中,$(this) 和 $slider 都指向同一个 DOM 元素。