#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. Спасибо за ваше напоминание, и ответ был обновлен. Вы могли бы сослаться на это 🙂