主干路由不是第一次触发

时间:2014-08-09 21:15:33

标签: javascript backbone.js

我已经开始学习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();

2 个答案:

答案 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功能。我需要更多地了解如何解决这个问题,但这是我正在做的教程,所以我会继续前进。谢谢你的帮助..