Backbone.js 在木偶中观看窗口级DOM事件的更好结构?
在CompositeView中,我实现了如下的无限滚动Backbone.js 在木偶中观看窗口级DOM事件的更好结构?,backbone.js,coffeescript,marionette,Backbone.js,Coffeescript,Marionette,在CompositeView中,我实现了如下的无限滚动 List.Foo extends Marionette.CompositeView initialize: (collection) -> @page = 1 $(window).on('scroll', @loadMore) loadMore: => if _nearBottom @page++ App.vent.trigger('list:foo:near_bott
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事件
我本想使用一个布局来观看此类事件并进行广播,但我的顶层布局似乎仍然不够宽,无法覆盖窗口/文档:)
我的问题是,在木偶中观看此类窗口/文档级DOM事件的更好结构是什么?谢谢 这个问题很久没有得到回答了,我改变了那个项目的实现,所以我没有碰它 阮的评论提供了非常好的观点,并提醒我回顾这个问题 我对阮的观点也有了新的理解 有些事情必须是全球性的,我们无法避免 这些事项包括但不限于:
- 路线
- 页面滚动
- 页面加载
- 调整窗口大小
- 全局键笔划
List.Foo
controller将根据自己的喜好观看应用程序事件scroll:bottom
,并提供下一页
可能还有其他部分对此事件感兴趣,例如,在页脚视图中弹出一个按钮说您在底部,或者另一个通知说如果您想看到更多,您需要注册,等等。由于木偶的美丽,他们还可以收听应用程序通风,而无需管理窗口级DOM
重要更新
如果您直接在控制器内部而不是在模块级别观看应用程序通风口,请确保控制器将停止收听此通风口,否则侦听器将在App.vents
中增加,这是内存泄漏
# FooController
onClose: ->
App.vent.off 'scroll:bottom'
这个问题很久没有得到回答了,我改变了那个项目的实现,所以我没有碰它 阮的评论提供了非常好的观点,并提醒我回顾这个问题 我对阮的观点也有了新的理解 有些事情必须是全球性的,我们无法避免 这些事项包括但不限于:
- 路线
- 页面滚动
- 页面加载
- 调整窗口大小
- 全局键笔划
List.Foo
controller将根据自己的喜好观看应用程序事件scroll:bottom
,并提供下一页
可能还有其他部分对此事件感兴趣,例如,在页脚视图中弹出一个按钮说您在底部,或者另一个通知说如果您想看到更多,您需要注册,等等。由于木偶的美丽,他们还可以收听应用程序通风,而无需管理窗口级DOM
重要更新
如果您直接在控制器内部而不是在模块级别观看应用程序通风口,请确保控制器将停止收听此通风口,否则侦听器将在App.vents
中增加,这是内存泄漏
# FooController
onClose: ->
App.vent.off 'scroll:bottom'
我一直在努力解决这个问题,我认为这是你必须处理的“非最佳实践”问题之一。根据定义,主干视图的级别始终低于“窗口”,而且根据定义,滚动事件通常需要在“窗口”级别捕获。这意味着事件通常不可能发生在视图的范围内。请记住在关闭视图时清理听众。@TNguyen,非常感谢您的宝贵意见!我也有一些新的理解类似于你的,但有一些不同,所以我张贴了我自己的答案。请检查:)我一直在努力解决这个问题,我认为这是你必须处理的“非最佳实践”问题之一。根据定义,主干视图的级别始终低于“窗口”,而且根据定义,滚动事件通常需要在“窗口”级别捕获。这意味着事件通常不可能发生在视图的范围内。请记住在关闭视图时清理听众。@TNguyen,非常感谢您的宝贵意见!我也有一些新的理解类似于你的,但有一些不同,所以我张贴了我自己的答案。请核对:)