⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 observer.js

📁 简单博客功能实现
💻 JS
字号:
//建立X2.Observer命名空间
/*
X2.Observer={
	//将obj1.func1绑定到obj2.func2,即obj1观察obj2
	observe:function(obj1,_func1,obj2,_func2){
		if(null==obj1)obj1=window;
		if(null==obj2)obj2=window;

		var func1=typeof(_func1)=='function'?_func1:obj1[_func1];
		var func2=typeof(_func2)=='function'?_func2:obj2[_func2];

		if(!func2._observers){
			var temp=func2;
			obj2[_func2]=function(){
				temp.apply(obj2,arguments);
				arguments.callee._observers.each(function(observer){
					observer();
				});
			}
			Object.extend(obj2[_func2],temp);
			func2=obj2[_func2];
			func2._observers=[];
		}

		var args=[];
		args.push(obj1);
		args=args.concat($A(arguments).slice(4));
		func2._observers.push(func1.bind.apply(func1,args));
		return func2._observers.length-1;
	}
	//删除绑定的函数
	,stopObserve:function(func,i){
		func._observers[i]=null;
		func._observers.splice(i,1);
	}
};
*/

X2.Observer={
		//observer.notice observes dispatcher.dispatch, arguments of observer.notice can be followed after 'dispatch'
		observe:function(observer,notice,dispatcher,dispatch){
			var _notice=observer[notice];
			var _dispatch=dispatcher[dispatch];
			if(!_dispatch._observers){
				var _oldMethod=_dispatch;	//reserve the old method or function which is observed
				dispatcher[dispatch]=function(){
					_oldMethod.apply(dispatcher,arguments);
					arguments.callee._observers.each(function(ob){
						if(ob)ob();
					});
				}
				Object.extend(dispatcher[dispatch],_dispatch);
				_dispatch=dispatcher[dispatch];
				_dispatch._observers=[];
			}

			var args=[observer].concat($A(arguments).slice(4));
			_dispatch._observers.push(_notice.bind.apply(_notice,args));
			return _dispatch._observers.length-1;
		}
		//能够获取被绑定函数的参数
		,observeAsEvent:function(observer,notice,dispatcher,dispatch){
			//var _notice=observer[notice];
			var _dispatch=dispatcher[dispatch];
			if(!_dispatch._observers){
				var _oldMethod=_dispatch;	//reserve the old method or function which is observed
				dispatcher[dispatch]=function(){
					_oldMethod.apply(dispatcher,arguments);
					var _args=arguments;
					arguments.callee._observers.each(function(ob){
						if(ob)ob.apply(window,_args);
					});
				}
				Object.extend(dispatcher[dispatch],_dispatch);
				_dispatch=dispatcher[dispatch];
				_dispatch._observers=[];
			}
            
            var _callback=function(){
                observer[notice].apply(observer,arguments);
            }
			_dispatch._observers.push(_callback);
			return _dispatch._observers.length-1;
		}
		//delete a observer
		,stopObserve:function(dispatch,i){
			dispatch._observers[i]=window;
		}
		//clear all observers
		,clearObservers:function(dispatch){
			dispatch._observers.clear();
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -