2014-11-06 77 views
0

我有一些途徑與前一個骨幹的應用程序設置斜線:骨幹路由在頁面加載錯誤與斜線

app.Router = Backbone.Router.extend({ 

    routes: { 
     'dashboard/:locationId/:product/:year': 'dashboard', 
     'bargraph': 'bargraph' 
    }, 
.... 

在文件準備好,我開始了骨幹歷史插件,並在那之後,我的路由工作正確和功能按我的預期運行。

$(function() { 
    Backbone.history.start(); 
}); 

不過,如果我重新加載頁面的URL已經路線,我得到一個錯誤(在Chrome,但可能其他瀏覽器太):

Uncaught Error: Syntax error, unrecognized expression: #dashboard/3/productA/2009 

我只得到這個錯誤的在那裏有正斜槓的路線。我的條形圖路線似乎可以在沒有正斜槓的頁面加載情況下正常工作。

我猜測這與撥打Backbone.history.start函數的時間有關。最簡單的解決方案是擺脫URL中的正斜槓,並使用其他URL安全分隔符。但它甚至會在頁面加載時使用/的URL編碼版本來打破。它看起來不太好。

Uncaught Error: Syntax error, unrecognized expression: #dashboard%2F3%2FInVigor 8440%2F2009 

不幸的是,錯誤是由jQuery的的縮小版來,所以我不知道這是在網站上的一些不起眼的位置的一個常見問題或特定的事發生。

有沒有人有任何可能的罪魁禍首的建議?可能的解決方法?

編輯:添加堆棧跟蹤

未捕獲的錯誤:語法錯誤,無法識別的表達式:#儀表板/ 3 /產品A/2009 VM142

standard.js:2$.error VM142 
    standard.js:2bc VM142 standard.js:2 
    bk VM142  standard.js:2 
q.querySelectorAll.bk VM142 standard.js:2 
$ VM142 standard.js:2p.fn.extend.find VM142 standard.js:2 
p.fn.p.init VM142 standard.js:2p VM142 standard.js:2c VM149 BCSUS_scopeScripts_B020D85856E4B758EB7D71EC4F5B7E5F.js:1 
(anonymous function) VM149 BCSUS_scopeScripts_B020D85856E4B758EB7D71EC4F5B7E5F.js:1 
p.Callbacks.k VM142 standard.js:2 
p.Callbacks.l.fireWith VM142 standard.js:2 
p.extend.ready VM142 standard.js:2D 

它的精縮,但standard.js包含的jQuery副本和其他插件。行nubmers不是很有幫助,但也許函數名稱在某些方面有幫助。

+0

呼叫跟蹤在控制檯中的這個錯誤是什麼樣的? – Quince 2014-11-06 23:06:49

+0

堆棧跟蹤中的'q.querySelectorAll'是否表明jQuery在嘗試解析選擇器時引發錯誤?任何機會,你可以在jsfiddle.net上重現問題?這聽起來並不像我的Backbone路由器問題。 – 2014-11-07 02:12:00

+0

你可以創建一個小提琴嗎? – 2014-11-07 05:26:56

回答

0

那麼,我發現這個問題,它不是與骨幹路由有關。有一部分網站在頁面加載時將location.hash送入選擇器。 面掌

if (location.hash) { 
    ... 
     doSomething(location.hash); // <-- feeds into a jQuery selector 
    } 

function doSomething(id) { 
    var container = $(id); 
..... 

這是運行JS應用程序啓動並導致問題之前。最後簡單的解決方案是將其包裝在try catch條款中。

感謝Mu和Quince指出了這一點。