2

这是我的咖啡脚本路由器类:

class App.Router extends Backbone.Router

  initialize: ->

    console.log 'Router.init'

    @on 'all', ->
      console.info 'route changed'

  routes:
    '': 'home'
    'test': 'test'

  home: ->
    console.log 'home routed'

  test: ->
    console.log 'test routed'

当我重新加载本地主机页面时,“@on 'all'”回调似乎触发了两次(我的萤火虫上的双重 console.info ......)

这是我的萤火虫输出:

App.init
Session.init
Router.init
home routed
route changed
route changed

如您所见,“路线已更改”输出位于我的主路线之后...

最后,这是我的引导代码(带有我的 App 命名空间...),我将 history.start

App =
  init: ->
    console.log 'App.init'
    @session = new App.Model.Session
    @router = new App.Router
    # @userPanel = new App.View.UserPanel
    Backbone.history.start pushState: true

  Model: {}
  View: {}
4

2 回答 2

5

事件是一种特殊的all事件侦听器语法,它捕获由源对象触发的任何类型的所有事件。我猜另一个事件实际上根本不是一个route事件,而是一个route:name事件。

要捕获所有路线,只需使用route事件:

@on 'route', ->
  console.info 'route changed'
于 2013-02-11T14:34:27.567 回答
2

这可以通过查看Backbone 源代码来解释:

this.trigger.apply(this, ['route:' + name].concat(args));
this.trigger('route', name, args);

尝试只监听 'route' 事件:

@on 'route'
于 2013-02-11T14:34:13.243 回答