观察者实现如下:
var Observer = (function(){
var __messages = {};
return {
regist: function(type, fn){
if(typeof __messages[type] === 'undefined'){
__messages[type] = [fn];
} else {
__messages[type].push(fn);
}
},
fire: function(type, args){
if(!__messages[type]){
return;
}
var events = {
type : type,
args : args || {}
},
i = 0,
len = __messages[type].length;
for(; i < len; i++){
__messages[type][i].call(this, events);
}
},
remove: function(type, fn){
if(__messages[type] instanceof Array){
var i = __messages[type].length - 1;
for(; i >= 0; i--){
__messages[type][i] === fn && __messages[type].splice(i, 1);
}
}
}
}
})();
注册方法如下:
Observer.regist('blurCount1', function(){
displayBlock('#tips-count'+1);
var check = inputCheck.bind('#count'+1).checkLength().over();
var tips = $('#tips-count'+1);
var count = $('#count'+1);
if(check === true){
count.style.borderColor = 'green';
tips.style.color = 'green';
tips.innerHTML = '格式正确';
//返回这个返回值
return true;
} else{
count.style.borderColor = 'red';
tips.style.color = 'red';
if(check === 'empty'){
tips.innerHTML = '姓名不能为空';
} else{
tips.innerHTML = '格式错误';
}
//返回这个返回值
return false;
}
});
发布消息方法如下:
addevent($('#count'+1),'blur', function(){
var ob1 = Observer.fire('blurCount1');
});
我现在的问题是,如何消息发布时,获取 'blurCount1' 方法的返回值,也就是 ob1 的赋值(这里是undefined,但我想获取的是 true/false,也就是注释掉的地方),能否通过注册事件传递的function来规定返回值
你同一个消息可以注册多个方法,然后
把所有事件都执行。那你所需要的是这个队列的函数执行后返回的哪个值?
如果需要所有的值,把值放入数组返回。如果如你注释只要一个值,那你要哪个值?
如果是需要把所有事件返回