2

概念的には、何をしeventsApi()ますか? これはBackboneon()に対してプライベートですが、once()、 、off()、およびの 4 つのパブリック イベント メソッドで使用されtrigger()ます。

それぞれで、真実ではない値を返す場合、それを呼び出すメソッドは「早期」に終了します。

これが行うことの 1 つは、呼び出しメソッドの 2 番目の部分が実行されるかどうかを判断することです。nameが true でない場合、または複合型 (オブジェクトまたはスペースで区切られた文字列) でない場合は、true を返し、メソッドの 2 番目の部分を実行できるようにします。

eventsApi機能的/論理的に何をするかを説明しようとしたので、概念的に、関数の主な目的は何ですか?

イベントAPI

  var eventsApi = function(obj, action, name, rest) {
    if (!name) return true;
    if (typeof name === 'object') {
      for (var key in name) {
        obj[action].apply(obj, [key, name[key]].concat(rest));
      }
    } else if (eventSplitter.test(name)) {
      var names = name.split(eventSplitter);
      for (var i = 0, l = names.length; i < l; i++) {
        obj[action].apply(obj, [names[i]].concat(rest));
      }
    } else {
      return true;
    }
  };
4

1 に答える 1

1

ソースのコメントが言うように、それはイベントAPIのより凝った使用法を実装します。

// Implement fancy features of the Events API such as multiple event
// names `"change blur"` and jQuery-style event maps `{change: action}`
// in terms of the existing API.

したがって、イベントマップでEventsAPIを使用する場合は次のようになります。

book.on({
  "change:title": titleView.update,
  "change:author": authorPane.update,
  "destroy": bookView.remove
});

このeventsApi関数は、入力がオブジェクトであることを検出し、on渡された各プロパティを再度呼び出します。

処理するもう1つのケースは、スペースで区切られたイベントです。

book.on("change:title change:author", ...);

この場合、eventsApi関数はこの状況を検出し、on渡されたイベントごとに1回呼び出します。

于 2013-03-13T21:10:11.433 に答える