Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js history';更改路线';事件_Backbone.js - Fatal编程技术网

Backbone.js history';更改路线';事件

Backbone.js history';更改路线';事件,backbone.js,Backbone.js,是否存在每次导航到不同URL时都会触发的常规事件 window.App = Models: {} Collections: {} Views: {} Routers: {} init: -> # Initialize Routers new App.Routers.Main() # Initialize History Backbone.history.start(pushState: true) # BIND VIEW C

是否存在每次导航到不同URL时都会触发的常规事件

window.App =
  Models: {}
  Collections: {}
  Views: {}
  Routers: {}

  init: ->
    # Initialize Routers
    new App.Routers.Main()

    # Initialize History
    Backbone.history.start(pushState: true)

    # BIND VIEW CHANGE?
    $(@).on 'changeOfRoute', -> 
      console.log "Different Page" 

$(document).ready ->
  App.init()
按视图执行此操作是可能的,但我正在寻找通用解决方案。

路由器上有“路由”事件:

  • “路由”(路由器、路由、参数)-当任何路由匹配时,由历史记录(或路由器)触发
这允许您绑定到特定路由

如果要在任何路由之后触发处理程序,请绑定到“route”,该路由将是第一个参数:

myRouter.on("route", function(route, params) {
    console.log("Different Page: " + route);
});

这将仅触发显式定义的路由的事件。如果要为未明确定义的路由触发事件,请根据

@TTT添加一个“splat”路由:不幸的是,主干网没有提供前/后事件,因此您需要覆盖或扩展Router.route。您可以在下面的答案中找到实现此目的的方法:

此扩展可能对您有用: 来自

每当路由匹配且其相应的回调即将执行时,在路由器内部调用此方法。重写它以执行路由的自定义解析或包装,例如,在将查询字符串交给路由回调之前解析查询字符串,如下所示:

var Router = Backbone.Router.extend({
  execute: function(callback, args) {
    args.push(parseQueryString(args.pop()));
    if (callback) callback.apply(this, args);
  }
});

有一些有用的代码用于重新定义路由器,以支持“之前”和“之后”挂钩,尽管它需要随着主干网的每个版本更改而更新。

谢谢,这很有效。但是,该事件在路由更改后激发。如果开始路由更改,是否会触发事件?看起来1.1.x版本中有Router.execute,它在每个路由之前触发。仅供参考,路线和历史
route
事件现在被拆分