javascript 观察者模式的返回值问题
观察者实现如下:
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来规定返回值
通过全局变量不是我想要的结果,观察者实现时会将返回值存入数组返回也不是我想要的结果(很显然如果多个事件同时监听,返回值会混乱)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你同一个消息可以注册多个方法,然后
把所有事件都执行。那你所需要的是这个队列的函数执行后返回的哪个值?
如果需要所有的值,把值放入数组返回。如果如你注释只要一个值,那你要哪个值?
如果是需要把所有事件返回