0

我正在測試以查看Turbolinks是否可以幫助我們的Web應用程序看起來更快一點,表現得像「單一頁面」應用程序一樣。Turbolinks總是像往常一樣加載頁面

既然我們已經有了一種「主鉤」上的所有鏈接的所有點擊,我就<body>設置data-turbolinks="false"然後改變了我們的點擊處理程序來調用Turbolinks:

function goToUrl(url) { 
    // some controls here, and then ... 

    Turbolinks.visit(url); 
} 

我也禁用緩存和根設置爲/

<meta name=\"turbolinks-cache-control\" content=\"no-cache\"> 
<meta name=\"turbolinks-root\" content=\"/\"> 

然而,我注意到,它總是執行標準的頁面變化,而不是它的「魔力」。

同樣的情況發生,如果我從控制檯調用方法,沒有顯示錯誤或警告,但頁面正常加載,而不是使用Turbolinks「魔術」。

它唯一的工作時間是訪問根地址("/")。

是否還有更多的配置涉及到,而不僅僅是使用visit()方法?

編輯:

進一步測試後,我注意到,當調用Turbolinks.visit(url)似乎「失敗」,由issueing正常頁面導航相反,它記錄時返回這樣一個對象是這樣的:

Object { 
    absoluteURL: "URL WHERE I TRIED TO NAVIGATE", 
    requestURL: "SAME AS ABOVE" 
} 

當我測試它是否正確裝入唯一的地址,我得到一個不同的對象,而不是:

turbolinks:visit { 
    target: HTMLDocument → /, 
    isTrusted: false, 
    eventPhase: 0, 
    bubbles: true, 
    cancelable: false, 
    defaultPrevented: false, 
    composed: false, 
    timeStamp: 1492781909168000, 
    cancelBubble: false, 
    originalTarget: HTMLDocument → /, 
    explicitOriginalTarget: HTMLDocument →/
} 

在第一種情況下,它看起來像一個普通的對象,而第二種看起來更像是一個事件;但是這無助於確定導致其無法正常工作的問題。

回答

1

最後,我發現了原因是,我們所有的鏈接都到PHP文件,例如像/folder/index.php?p=1&x=2,並Turbolinks具有用於檢查,如果鏈接的延伸,它必須是htm之一,htmlxhtml

所以,我試圖重寫那個函數用另一個,就像這樣:

Turbolinks.Location.prototype.isHTML = function() { 
    return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml|php))$/); 
}; 

這樣它開始工作按預期後。

相關問題