我已经开始学习Backbone.js了。我为3个链接设置了一个简单的路由器。其中2个完全触发路由,但是在下面的代码中只有一个href="#/active"
,在我先点击其他2个链接之一之前,它不会触发路由。
Html是:
<ul id = filters>
<li>
<a class="selected" href="#/">All</a>
</li>
<li>
<a href="#/active">Active</a>
</li>
<li>
<a href="#/completed">Completed</a>
</li>
</ul>
使用Javascript:
var Workspace = Backbone.Router.extend({
routes: {
'*filter': 'setFilter'
},
initialize: function() {
this.on('route:setFilter', this.setFilt);
},
setFilt: function(param) {
app.TodoFilter = param || '';
app.Todos.trigger('filter');
}
});
app.TodoRouter = new Workspace();
Backbone.history.start();
答案 0 :(得分:1)
路由器不会那样工作,请尝试这种方式。
路线:{
'filter': 'setFilter', 'active': 'activeRoter', 'completed':'completedRouter' }, setFilter: function(){ //Do something }, activeRoter: function(){ //Do something }, completedRouter: function(){ //Do something }
答案 1 :(得分:0)
谢谢大家,我正在使用的路由使用splat来声明一个包含一个参数的默认路由 - 参数名称为filter
,并将其作为param
参数传递给{{1} }}。我发现问题不在于我的路由问题。当我首先加载应用程序时,所有路由都可以正常工作。问题是当我刷新页面时,我在一条路线上,例如使用网址setFilt(param)
。在完全呈现页面之前,将调用http://localhost:5000/todo.html#/active
函数。然后当我再次单击Active链接时,Backbone看到我已经在正确的路由上,因此不会触发setFilt
功能。我需要更多地了解如何解决这个问题,但这是我正在做的教程,所以我会继续前进。谢谢你的帮助..