📄 observer.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 + -