Backbone没有调用路由器功能?

时间:2014-08-29 15:59:09

标签: javascript backbone.js

所以我有以下主干路线:

Nightbird.Routers.Errors = Nightbird.Routers.Core.extend({

  routes: {
    'server_error': 'serverError',
  },

  initialize: function(){
    console.log('dasddasd');
  },

  serverError: function() {
    console.log('asdasdasd');
    var serverErrorView = new Nightbird.Views.ServerError();
    serverErrorView.render();
  }
});

它确实进入了这个类,因为正在调用initialize函数,当这个路由加载时我在控制台中看到:dasddasd,但我看不到asdasdasd

网址为localhost:9000/#server_error

有人可以解释我做错了什么吗?我不知道还有什么我想提供更多信息,所以请询问任何其他细节。

的其他

以下是应用注册的方式:

window.Nightbird = {
  Models: {},
  Collections: {},
  Views: {},
  Routers: {},

  blogId: 0,

  initialize: function() {
    if (window.Development === undefined && window.Production === undefined) {
      throw 'Production class (Production.config.js) cannot be missing. App Cannot load.';
    }

    if (window.Development !== undefined) {
      this.blogId = window.Development.BLOG_ID;
    } else {
      this.blogId = window.Production.BLOG_ID;
    }

    new Nightbird.Routers.Posts();
    new Nightbird.Routers.Errors();

    if (!Backbone.History.started) {
      Backbone.history.start();
    } else {
      Backbone.history.stop();
      Backbone.history.start();
    }
  }
}

此课程扩展:

Nightbird.Routers.Core = Backbone.Router.extend({

  serverError: function(){
    Backbone.history.navigate("server_error", {trigger: true});
  }

});

为什么这么简单的抽象,因为这样任何问题的获取或发布或者你有什么可以将你重定向到服务器错误路由。

然后在我的index.html我做:

<!DOCTYPE html>
<html>
  <body>
    <div id="manage">
    </div>
  </body>
  <script src="js/compiled.js"></script>
  <script>
    Nightbird.initialize();
  </script>
</html>

1 个答案:

答案 0 :(得分:1)

我猜问题就是你实例化Backbone Router的方式 尝试创建继承自Backbone.Router的Backbone路由器。

当您检查Backbone.History.started是否为true时,可能不是。所以它会转到else语句,那时Backbone.History.star()是未定义的。所以它永远不会启动Backbone.History

希望它有所帮助。