用例:
我有一个div#callout
,如果用户单击某些其他对象,滚动或除了超时(120秒)之外什么也不做,我想对它进行hide()
。但是,如果用户单击#callout
或其中的对象,则不会执行hide()
动作。同样,如果任何子元素(例如input
)获得了焦点,则超时无效(假设人们正在键入)。
理念:
我打算通过扩展Backbone.Events
创建一个聚合事件,这三个事件中的任何一个都会触发类似"blur:callout"
的事件
挑战:
我想我可以进行滚动检测和超时,但是如何检测某个地方的点击但不是#callout
?我不想为所有其他视图和子视图添加触发事件,因为它们可能有100个并且还在增长。
最佳答案
因此,基本上,用户必须在120秒内单击div#callout
,否则它将隐藏。那么您只有2种情况:
用户在标题隐藏之前(即页面加载后的120秒内)单击内部
用户忽略div#callout
,它会自动隐藏。
如果用户不与callout
进行交互,则无需担心。您唯一需要担心的是用户是否在callout
内单击。
因此,除非您在div#callout
内有大量嵌套视图,否则不会有问题。
如果在div#callout
中确实有许多嵌套视图,则可以通过某种继承或混合将reset hide
事件附加到每个子级。