백 본 이벤트 이벤트 구독 및 게시 원본 읽 기
백 본 이벤트 모듈
이벤트 바 인 딩 방법
on: function(name, callback, context) {
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;
},
현재 bancbone. event 의 인 스 턴 스 에 추가이벤트 속성, backbone. events 를 통 해 구독 하 는 모든 휴가 는 이 해시 표 에 있 습 니 다.
_이벤트 의 구조, 먼저 해시 후 배열, 그 중에서 ctx, context 할당 반전 함수 의 this
_events={
eventName:[handlerObj,handlerObj,handlerObj],
eventName:[{callback:function(){}, context: Object, ctx: Object}]
}
trigger:
trigger: function(name) {
if (!this._events) return this;
var args = slice.call(arguments, 1); /* callback */
if (!eventsApi(this, 'trigger', name, args)) return this;
var events = this._events[name];
var allEvents = this._events.all;
if (events) triggerEvents(events, args);//triggerEvents apply call
if (allEvents) triggerEvents(allEvents, arguments); // all , name all
return this;
}
triggerEvents: 실행이벤트 [name] 의 방법
공식 적 으로 는 콜 의 성능 이 apply 보다 좋 기 때문에 세 개의 매개 변수 아래 는 모두 콜 을 사용 하고 세 개의 매개 변수 이상 은 apply 를 사용 합 니 다. 대신 의 요 구 는 이렇게 높 습 니 다.
var triggerEvents = function(events, args) {
var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
switch (args.length) {
case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);return;
case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.