我已阅读了许多相关的主题,但似乎没有一个提供解决方案.
我正在尝试做的是在我的Backbone.js应用程序中智能地处理滚动条.像许多其他人一样,我有多个#mypage哈希路由.其中一些路线是分层的.例如,我有一个列出一些项目的#list页面,我点击列表中的项目.然后它打开一个#view/ITEMID页面.
我的页面都在HTML布局中共享相同的Content div.在导航更改中,我将一个新的div注入到Content div中,代替该路径的视图,替换之前的内容.
所以现在我的问题:
如果项目在列表中很远,我可能需要滚动才能到达那里.当我点击它时,"默认"Backbone行为是#view/ITEMID页面显示在#list视图所在的相同滚动位置.修复很容易; 只要注入新视图,只需添加$(文档).scrollTop(0).
问题是,如果我按下后退按钮,我想回到之前滚动位置的#list视图.
我试图采取明显的解决方案.存储路线图以滚动内存中的位置.我在hashchange事件的处理程序的开头写入此映射,但在将新视图实际放入DOM之前.在新视图位于DOM之后,我从hashchange处理程序末尾的地图中读取.
我注意到的是,至少在Firefox中的某个地方,滚动页面作为hashchange事件的一部分,因此当我的写入地图代码被调用时,文档的滚动位置不稳定.绝对没有用户明确提出.
任何人都知道如何解决这个问题,或者我应该使用的最佳做法?
我仔细检查过,我的DOM中没有与我正在使用的哈希相匹配的锚标签.
我一直在谷歌上看这个并阅读SDK文档中的Collections条目,但没有透露任何信息.iOS SDK是否有开箱即用的BST(任何变体)实现?
一个主要的开发平台缺少一些基本的东西似乎很奇怪.他们的哈希实现是否那么神奇?或者开发人员假设没有人会对有订单的东西进行插入/删除?
我NSSet现在可以使用,因为我知道我们大多数人(包括我自己)并没有真正在iOS上编写任何需要保证访问时间的大量计算,但它仍然在啃着我.
cocoa-touch objective-c binary-search-tree ios data-structures