文档准备好后如何调用Backbone初始路由?

时间:2013-02-15 01:38:55

标签: jquery backbone.js

codeschool.com Backbone课程的第7级在下面的代码中有以下代码,并说明整个事情可以通过以下jquery启动

$(function(){ TodoApp.start() })

将调用Backbone.history.start。但是,对Backbone.history.start的调用最终如何调用index,以便调用fetch来填充模型集合todoList

var TodoApp = new (Backbone.Router.extend({
  routes: { "": "index", "todos/:id": "show" },
  initialize: function() {
    this.todoList = new TodoList();
    this.todosView = new TodoListView({collection: this.todoList});
    $('#app').append(this.todosView.el);
  },
  start: function(){
    Backbone.history.start({pushState: true});
  },
  index: function(){
    this.todoList.fetch();
  },
  show: function(id){
    this.todoList.focusOnTodoItem(id);
  }
}));

1 个答案:

答案 0 :(得分:4)

如果查看Backbone source,您可以看到发生了什么。

History.start结束时,您可以看到它调用loadUrl,如下所示:

// Attempt to load the current URL fragment. If a route succeeds with a
// match, returns `true`. If no defined routes matches the fragment,
// returns `false`.
loadUrl: function(fragmentOverride) {
  var fragment = this.fragment = this.getFragment(fragmentOverride);
  var matched = _.any(this.handlers, function(handler) {
    if (handler.route.test(fragment)) {
      handler.callback(fragment);
      return true;
    }
  });
  return matched;
},

添加路线时,会将其添加到this.handlers。由于有一个与'index'匹配的处理程序,因此调用了回调。