Javascript 是否有类似“的东西?”;listenTo";在jQuery中?还是必须使用名称空间并手动解除绑定?
我正在使用第三方lazyload插件: 在其来源中,它有以下内容:Javascript 是否有类似“的东西?”;listenTo";在jQuery中?还是必须使用名称空间并手动解除绑定?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我正在使用第三方lazyload插件: 在其来源中,它有以下内容: if (0 === settings.event.indexOf("scroll")) { $container.on(settings.event, function (event) { return update(); }); } 这将对父元素应用“滚动”事件。插件中没有解除事件绑定的逻辑。这很糟糕,因为有时我会添加100个惰性元素,然后删除并重新添加其他元素,而不替换容器。这会导致大量事件
if (0 === settings.event.indexOf("scroll")) {
$container.on(settings.event, function (event) {
return update();
});
}
这将对父元素应用“滚动”事件。插件中没有解除事件绑定的逻辑。这很糟糕,因为有时我会添加100个惰性元素,然后删除并重新添加其他元素,而不替换容器。这会导致大量事件堆积起来
我正在考虑修改插件,使其内容如下:
if (0 === settings.event.indexOf("scroll")) {
// .on('scroll.item_12')
$container.on(settings.event + settings.namespace, function (event) {
return update();
});
// http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom
$(this).on('remove', function() {
$container.off(settings.event + settings.namespace);
});
}
这是处理这种情况的正确方法吗?使用BackboneJS时,我可以访问:,但我不确定jQuery/Javascript中是否存在类似的函数。在jQuery中,只有两种方法<代码>打开和
关闭
。或者只需对要删除的每个元素调用remove()
$(document).off(elementName)
我在jQuery中对事件命名如下:
scroll.left
/scroll.right
,等等。不,但是您可以在自己的系统中实现此方法。这非常简单,甚至可以使用jqueryevent.namespace
来处理DOM事件。不,jquery中没有类似于listenTo
的东西,但您可以使用event.namespace实现,这样做更好更简单!(即使实现了listenTo for jquery,您也必须为带有event.namespace的命名空间使用唯一的id
)