我有一個單一的Sammy路線,可識別任意數量的參數。路線如下所示:Sammy.js與Knockout.js不運行路線與每個URL更改
get(/^\/(?:\?[^#]*)?#page\/?((?:[^\:\/]+\:[^\:\/]+\/?)*)$/g, function() {
var params = {};
var splat = this.params.splat[0];
var re = /([^\:\/]+)\:([^\:\/]+)/g;
match = true
while(match = re.exec(splat)) {
params[match[1]] = match[2];
}
self.loadData(params);
});
此代碼有效。它所做的是識別#page/param1:value1/param2:value2/
模式的任意數量參數的路徑。我的loadData
函數具有許多這些參數的默認值。我相信這些頁面的實際加載沒有問題,因爲它在許多瀏覽器的許多計算機上都可以100%地工作。然而,它在我的Android瀏覽器和我朋友的Mac的Safari和Chrome(適用於我的PC的Chrome)上有奇怪的行爲。我注意到這些是Webkit瀏覽器。
其行爲是路由爲第一個URL更改正確運行,然後不會進行下一個URL更改(儘管瀏覽器欄中的URL確實總是更改),然後它將再次運行第三個一個,而不是第四個。也就是說,它每隔一個時間工作。這對我來說似乎是非常奇怪的行爲,而且我對如何調試這一點感到不知所措。對於某些鏈接,我能夠運行黑客,因此點擊時我將窗口位置設置爲URL,並強制運行runRoute('get', url);
的sammy代碼。必須爲頁面上的每個點擊事件添加此功能是不切實際的,而且這並不能真正說明所有URL更改。有沒有什麼我可以做的調試爲什麼我的路線沒有在每次URL改變時都運行?