2017-04-07 110 views
0

这应该是超级基础,但我无法获得路由工作。我应该提到该应用程序位于名为/ dist /的子目录中。这里是我的代码:骨干路由没有触发

var QuestionRouter = Backbone.Router.extend({ 

    routes: { 
     "/dist/" : "startTest" 
     "dist/:id": "getModel" 
    }, 

    startTest: function(){ 
     console.log('home called') 
    }, 

    getModel: function(){ 
     app.getModel(id); 
    } 

}); 


    var app = new QuestionView; 
    var appRouter = new QuestionRouter; 
    Backbone.history.start({pushState: true}); 

的URL来触发此路线是:

www.example.com/dist/ 
    www.example.com/dist/12345 

任何帮助,将不胜感激。

+0

的可能的复制[骨干路由,不需要哈希?](http://stackoverflow.com/questions/7310230/backbone-routes-without-hashes) –

+0

@EmileBergeron它是如何复制?有问题的代码有'{pushState:true}' –

+0

@TJ它是一个重复的因为OP想知道如何使用Backbone URL而不使用散列。他使用'pushState',但其余部分在重复内部进行解释。 –

回答

3

您需要使用#(散列符号)。

骨干路由器用于路由应用程序的URL时 使用哈希标签(#)

这是从骨干教程报价:What is a router?

Backbone's Router documentation

然后您的路线将是:

www.example.com/#/dist/ 
www.example.com/#/dist/12345 

您也可以使用Backbone routes without hashes

+1

这对于{pushState:true}选项不是必需的 –

+0

如果'pushState'不是预期的目标,这可能会起作用。 –

+0

是的,您可以使用html5功能PushState。请参阅前面提到的stackoverflow条目。 从http://backbonejs.org/#History:为了表明您希望在应用程序中使用HTML5 pushState支持,请使用Backbone.history.start({pushState:true})。 – gerardor

0

好了,所以我可以工作了这一点:

  1. 我的路线哈希应该是这样的:

    路线:{ “”: “startTest”, “:标识”: “getModel” }

  2. ,我不得不删除pushState的:在真实的地方,这种路线并未被触发,不知道为什么:

    Backbone.history.start();