2014-11-06 76 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指出了这一点。