3

codeschool.comバックボーンコースのレベル7には、以下のコードがあり、次のjqueryですべてを開始できると述べています。

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

を呼び出しますBackbone.history.start。しかし、への呼び出しは、モデルコレクションにデータを入力するために呼び出されるように、Backbone.history.start最終的にどのように呼び出されることになりますか。indexfetchtodoList

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);
  }
}));
4

1 に答える 1

4

バックボーンソースを見ると、何が起こっているかがわかります。

の終わりに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'に一致するハンドラーがあるため、そのコールバックが呼び出されます。

于 2013-02-15T02:00:00.377 に答える