我在这里有一个测试用例:http: //tremby.net/knockouttest/page1.php
我正在使用 pjax 进行页面转换。在上面的测试用例的第 1 页和第 2 页之间单击会异步加载两个页面,然后替换元素的内容#main
。在此过程中会推送浏览器历史状态,因此位置栏中的 URL 会更新,并且后退按钮应该让我们回到原来的位置。
第 1 页上的列表填充了敲除的foreach
绑定和List
我定义的模型(在头部的内联脚本中)。在ready
第 1 页上,内联脚本运行ko.applyBindings
,因此列表被填充。
“添加项目”按钮将项目添加到视图模型,然后将其剔除添加到列表中。
添加一些项目,然后转到第 2 页,然后返回第 1 页,列表是新的,最初有 3 个项目,添加项目按钮仍然有效。这对我们的用例来说很好。
添加一些项目然后转到第 2 页,然后使用浏览器的后退按钮返回第 1 页,另一方面,这就是我的问题所在。新项目仍然可见(这很好,并且在使用浏览器的后退按钮时对我们的用例至关重要),但“添加项目”按钮现在已损坏。将新项目推送到的代码observableArray
肯定正在运行,但似乎绑定已经消失,因此淘汰赛不知道添加新的 DOM 元素。
我无法在 上ko.applyBindings
再次运行该功能popstate
,否则淘汰赛现在会认为我希望为列表中的每个项目复制每个现在存在的项目,然后每次单击“添加项目”都会给出多个新项目。
我有一种强烈的感觉,我缺少一些明显的东西,但我找不到任何看起来对文档有帮助的东西。任何帮助将非常感激。