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);
}
}));
答案 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'匹配的处理程序,因此调用了回调。