Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 捕获div上的滚动事件_Backbone.js_Backbone Events_Marionette - Fatal编程技术网

Backbone.js 捕获div上的滚动事件

Backbone.js 捕获div上的滚动事件,backbone.js,backbone-events,marionette,Backbone.js,Backbone Events,Marionette,我正在尝试在Backbone.marionete.CompositeView中捕获滚动事件,但没有成功 作为练习,我用主干线木偶重写。如您所见,当您向下滚动时,将获取并显示更多的书籍(即无限滚动)。但是,我无法在视图中捕获滚动事件 以下是我的(简化)代码: 完整的源代码可以在这里看到: 我不明白的是,“点击”事件被正确触发,但“滚动”事件没有被正确触发。我做错了什么 编辑:所以最后错误很简单。。。我正在将“el:#content”传递给视图的构造函数,但是滚动是在CSS on.library中

我正在尝试在Backbone.marionete.CompositeView中捕获滚动事件,但没有成功

作为练习,我用主干线木偶重写。如您所见,当您向下滚动时,将获取并显示更多的书籍(即无限滚动)。但是,我无法在视图中捕获滚动事件

以下是我的(简化)代码:

完整的源代码可以在这里看到:

我不明白的是,“点击”事件被正确触发,但“滚动”事件没有被正确触发。我做错了什么


编辑:所以最后错误很简单。。。我正在将“el:#content”传递给视图的构造函数,但是滚动是在CSS on.library中定义的。所以有一次我把我的DOM从

<div id="content">
  <div class="library">
  </div>
</div>



一切正常…

我不知道你的
el
是什么,但我怀疑它没有收到
滚动事件。由于主干将事件处理委托给jQuery,请看一下jQuery对以下内容的看法:

当用户滚动到某个元素时,
scroll
事件被发送到该元素 元素中的不同位置。它适用于
窗口
对象,但也适用于 使用
overflow
CSS属性集可滚动的帧和元素 当元素的显式高度或宽度小于时滚动(或
auto
) 大于其内容物的高度或宽度)


除非您的
el
满足这些条件,否则它将不会收到
滚动
事件。您必须将事件处理程序放在
窗口
或其他确实接收它的元素上。

此代码适用于我:

var View = Backbone.View.extend({
  events: { "scroll": "scroll" },
  scroll: function(){ console.log( "scrolling..." ); }
});

正如@JoshLeitzel所说,我认为问题在于DOM元素本身

尝试通过以下操作绕过主干:

$("#content").bind( "scroll", function(){ console.log( "scrolling from jquery directly" ); } );
还应尝试替换:

el: $('#content')


我不认为这是问题所在,但新样式的
el
definition:)

主干连接到顶部的el元素以查找所有事件。一些DOM事件不会冒泡到父元素,这包括滚动。“单击”事件之所以有效,是因为它不冒泡


Ref:

el
是一个具有固定高度的div,并且
overflow-y
设置为
滚动
。换句话说,它应该接收滚动事件。还有什么不对劲的吗?所以最后,我绑定到的容器与我定义滚动的容器不一样(请参见我的编辑)。但是请投你的赞成票;-)你的回答帮助我解决了这个问题,谢谢。(请参阅我的编辑。)
$("#content").bind( "scroll", function(){ console.log( "scrolling from jquery directly" ); } );
el: $('#content')
el: '#content'