Dav*_*ulc 4 backbone.js backbone-events marionette
我正在尝试捕获Backbone.Marionette.CompositeView中的滚动事件,但没有成功.
作为练习,我使用Backbone.Marionette 重写http://www.atinux.fr/backbone-books/.如您所见,当您向下滚动时,会获取并显示更多书籍(即无限滚动).但是,我无法在我的视图中捕获滚动事件.
这是我的(简化)代码:
LibraryView = Backbone.Marionette.CompositeView.extend({
// properties, initializer, etc.
events: {
'scroll': 'loadMoreBooks',
'click': 'loadMoreBooks'
},
// some functions
loadMoreBooks: function(){
console.log("loadMoreBooks");
}
});
Run Code Online (Sandbox Code Playgroud)
完整的源代码可以在这里看到:https://github.com/davidsulc/backbone.marionette-atinux-books/blob/scroll/assets/javascript/app.js#L86-89
我不明白的是,"点击"事件正在被正确触发,但"滚动"事件却没有.我究竟做错了什么?
编辑:所以错误最后很简单......我将"el:#content"传递给视图的构造函数,但滚动在CSS中定义为".library".一旦我改变了我的DOM
<div id="content">
<div class="library">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
至
<div id="content" class="library"></div>
Run Code Online (Sandbox Code Playgroud)
一切正常......
小智 16
Backbone附加到顶部el元素以查找所有事件.一些DOM事件不会冒泡到父元素,这包括滚动.点击事件有效,因为它确实有泡沫.
参考:http://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#event-type-scroll
这段代码适合我:
var View = Backbone.View.extend({
events: { "scroll": "scroll" },
scroll: function(){ console.log( "scrolling..." ); }
});
Run Code Online (Sandbox Code Playgroud)
正如@JoshLeitzel所说,我认为问题在于它自己的DOM元素.
尝试绕过Backbone做:
$("#content").bind( "scroll", function(){ console.log( "scrolling from jquery directly" ); } );
Run Code Online (Sandbox Code Playgroud)
也尝试替换:
el: $('#content')
Run Code Online (Sandbox Code Playgroud)
通过
el: '#content'
Run Code Online (Sandbox Code Playgroud)
我不认为这是问题,但是新的el
定义风格:)
归档时间: |
|
查看次数: |
13984 次 |
最近记录: |