Магистраль.Events eventsApi, зачем возвращать true, когда name не является значением истинности

#javascript #backbone.js

#javascript #backbone.js

Вопрос:

 var eventsApi = function(obj, action, name, rest) {
  if (!name) return true;

  // code ...

  return true;
};
  

Я не знаю, почему код здесь возвращает true, пока !name . Если я свяжу событие с переменной, которая, возможно, не определена, событие будет привязано к объекту.

Ответ №1:

Параметр ‘name’ здесь означает имена событий, которые вы хотите привязать к объекту (первый параметр). Функция eventsApi вернет true, если параметр name не поддерживает регистрацию нескольких событий (API событий Backbone поддерживает только формат строковых и объектных обозначений, например: «изменить щелчок», {изменить: действие, щелкнуть: action2}).

Если передать параметр, не являющийся строкой или именем объекта, events api зарегистрирует обработчик события для «отдельного события». В вашем случае вы пытаетесь зарегистрировать пользовательское событие с именем undefined, и backbone будет рассматривать его как регистрацию одного обработчика событий.

Подводя итог, возвращаемое логическое значение определяет, нужно ли регистру событий выполнять «регистрацию нескольких событий» или нет.

 ....
on: function(name, callback, context) {
  //multi-events registration will be processed if the eventsApi function call return 'false'
  if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
  this._events || (this._events = {});
  var events = this._events[name] || (this._events[name] = []);
  events.push({callback: callback, context: context, ctx: context || this});
  return this;
},
  

Комментарии:

1. Спасибо! Но, похоже, регистрация события вступила в силу. jsfiddle

2. Спасибо за ваше напоминание, и ответ был обновлен. Вы могли бы сослаться на это 🙂