主干:从视图类向路由器添加路由

Backbone: Adding routes to router from view classes

本文关键字:路由器 添加 路由 视图 主干      更新时间:2023-09-26

我正在尝试弄清楚是否有办法在骨干中动态添加路由。我有根据特定用户的权限动态添加的视图。我希望能够让 view 类在实例化时添加其路由,而不必定义路由器中的所有路由(我使用的是单个应用程序范围的路由器)。

我尝试使用主干路由器文档中描述的路由方法,但是当我检查路由器的"路由"对象时,我没有看到添加的路由。

我怀疑你会说我可以为每个视图创建一个新路由器......可能就是这样,但我宁愿不要。

谢谢!

我尝试使用主干路由器文档中描述的路由方法,但是当我检查路由器的"路由"对象时,我没有看到添加的路由。

路由器的路由对象只是您传递到扩展函数中的哈希。

实际路由将添加到 Backbone.history 对象中。

因此,当您使用 Router.route() 函数时,它不会修改路由器的 Routes 哈希,但它实际上会将路由添加到 Backbone.history,并且它将按预期工作。

Workspace = Backbone.Router.extend({
  routes: {
    "help":                 "help",    // #help
    "search/:query":        "search",  // #search/kiwis
    "search/:query/p:page": "search"   // #search/kiwis/p7
  },
  help: function() {
    console.log("help");       
  },
  search: function(query, page) {
    console.log("search",query,page);
  },
  new: function() {
    console.log("new");
  }
});
Main = Backbone.View.extend({
    tagName: 'div',
    initialize: function() {
        app.route('new','new');
    },
    render: function() {
      return this;   
    }
});
​app = new Workspace();
Backbone.history.start();
main = new Main();
app.navigate('new',{trigger:true});  //=> "new"

现场示例:http://jsfiddle.net/edwardmsmith/XsDQu/4/