Backbone.history.navigate 和 this.router.navigate 有什么区别

What's the difference between Backbone.history.navigate and this.router.navigate

Backbone.history.navigatethis.router.navigate有什么区别?

为什么有时前者可以,而后者不行?

如果您查看 Backbone source,您会发现 Router.prototype.navigate 只是 Backbone.history.navigate 的代理,您可以在任何地方调用它而无需路由器实例。

// Simple proxy to `Backbone.history` to save a fragment into the history.
navigate: function(fragment, options) {
  Backbone.history.navigate(fragment, options);
  return this;
},

路由在 global, namespaced in Backbone, History instance 中处理。

这是为了让开发人员创建自己的 History class,然后覆盖 Backbone.history 属性 以全局更改路由行为。

History class 没有太多记录,但它是 well commented in the source

此外,在 Router class 中有一个 navigate 的代理可以很容易地直接在路由器中挂钩我们自己的行为。


至于为什么有时它不起作用,可能是因为您试图在 class 中执行 this.router.navigate,而 this.router 不存在。