【问题标题】:backbone router add route as function骨干路由器添加路由作为功能
【发布时间】:2012-11-15 16:26:55
【问题描述】:

我正在使用 Backbone.js,并且我有一个路由器。这是我的路由属性:

routes: {
    "pagea": "pageafunc",
    "pageb": "pagebfunc",
    "pagec": "pagecfunc",
}

是否可以添加如下所示的路线:

"mypath/*subroute": function(subroute) {
    //do somethong  
}

?

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    不行,routes 对象只能有字符串值。

    如果您想传递自己的回调,则需要以编程方式设置路由。例如,在路由器的初始化函数中,您可以这样做:

    this.route('mypath/*subroute', 'mypath_subroute', function(){
      // Route callback stuff.
    });
    

    也就是说,这很快就会变得非常不可读,这意味着您必须扫描您的初始化函数以了解您定义的所有路由,因此将所有路由存储在 routes 对象中要干净得多.或者至少将路由函数体保留在路由器本身上,并将路由路径保留在单独的部分中以便于阅读。

    【讨论】:

    • 谢谢!我需要它来动态创建路由,所以首先它不像路由属性那样可读。
    • 有道理。很高兴为您提供帮助:D
    • 因为我是用这个来动态创建路由的,怎么才能给每条路由取一个不同的名字呢??..
    • 您应该能够在名称或其他内容上附加一个递增的 id。如果您想将额外的事件绑定到路由器,则通常使用该名称。
    【解决方案2】:

    接受的答案不正确,或者可能只是过时了。无论哪种情况,根据官方Backbone docs

    路由哈希将 URL 映射到路由器上的函数或者只是直接的函数定义,如果您愿意的话

    哇!这意味着您应该能够执行以下操作:

    var
    Router= Backbone.router.extend({
      routes:{
        "path/to/:view": function(view){ console.log(view); }
        }
      });
    

    例如,如果您想在初始实例化之前扩展修改{routes} 对象,这是一个方便的速记。但是,值得注意的是,使用匿名回调将禁用命名空间事件触发该路由。 (请参阅上面的@loganfsmyth's comment。)不过,这可能不是最糟糕的权衡,具体取决于您的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多