【发布时间】:2013-11-20 11:25:31
【问题描述】:
在 CompositeView 中,我实现了这样的无限滚动
List.Foo extends Marionette.CompositeView
initialize: (collection) ->
@page = 1
$(window).on('scroll', @loadMore)
loadMore: =>
if _nearBottom
@page++
App.vent.trigger('list:foo:near_bottom', @page)
_nearBottom =>
$(window).scrollTop > $(document).height - $(window.height) - 200
# Then I have the controller to process the event "list:foo:near_bottom",
# to ask for adding one more page of data in collection.
代码基本上按预期工作。但我觉得它不能令人满意,因为我认为这个 ComposteView 会监视其范围之外的一些 DOM 事件,也就是窗口级 DOM 事件。
我想使用布局来观看此类事件并进行广播,但我的顶级布局似乎还不足以覆盖窗口/文档 :)
我的问题是,在 Marionette 中观看此类窗口/文档级 DOM 事件的更好结构是什么?谢谢!
【问题讨论】:
-
我一直在努力解决这个问题,我认为这是您必须处理的那些“非最佳实践”的事情之一。根据定义,Backbone 视图将始终处于比“窗口”级别更低的级别,并且根据定义,滚动事件通常需要在“窗口”级别捕获。这意味着通常不可能在视图范围内发生事件。请记住在关闭视图时清理监听器。
-
@TNguyen,非常感谢您的好意见!我也有一些新的理解,类似于你的,但有一些不同,所以我发布了我自己的答案。请检查:)
标签: backbone.js coffeescript marionette