用例:

我有一个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事件附加到每个子级。

07-24 20:09