澄清:
我只针对支持createEvent,addEventListener等的现代浏览器....
问题
我的意思是本机,用JavaScript。搜索显示他们没有使用createEvent()
。
我在documentation寻找答案,但没找到。
我在source here中搜索了createEvent()
,但没有点击。
骨干如何从母语角度实现事件?
他们是否使用observer pattern?
如果JavaScript已经有可用的自定义事件(通过createEvent()
),并且事件监听器也可用(addEventListener()
为什么他们不使用内置事件?
答案 0 :(得分:8)
除了骨干视图之外,使用本机事件是没有意义的。 Backbone为models,collections,and generally
提供事件管理原生事件(通过createEvent
,addEventListener
)绑定到DOM节点。模型和集合不与DOM节点相关联 - 您必须跳过许多不必要的环节来重用该代码。
不是,不。 Backbone.Events
更接近publish-subscribe pattern。对象维护命名事件的事件侦听器列表(通过on
),然后该对象在触发事件时通过trigger
触发对这些侦听器的调用。
Backbone的核心是每个事件维护一个事件监听器数组(在骨干的旧版本中,它曾经使用链表;这个速度较慢)。每个对象都维护自己的侦听器列表;没有中央登记处。
在trigger
上,骨干调用所有为该事件注册的侦听器;它还会为特殊的all
事件调用任何侦听器。
答案 1 :(得分:1)
Backbone执行like this。这是计算空白和评论的163行代码。
澄清如何
on|bind
,off|unbind
,trigger
,once
,listenTo
,stopListening
至于为什么,它基于作者和贡献者的设计决策,使他们感觉自己适合项目的目标和风格。给定主干模型,集合和视图使用的常用模式,命名空间和多事件绑定是很好的便利。
是,他们正在使用观察者模式。所有基于事件的系统都包含观察者模式的实现。事件,发布/发布和观察者在广义上讲是同义词,尽管有些人可能会发现在详细讨论时区分它们很重要。