我正在尝试使用 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 元素。