控制器、服务之间通信 - Julienedies/brick GitHub Wiki
brick内置了一个事件sub/pub系统。通过此事件系统完成控制器与控制器之间、控制器与服务之间的消息传递。
查看以下示例代码效果
//注册aModel服务
brick.services.reg('aModel', function () {
return {
pool: [],
get: function (index) {
return index !== void(0) ? this.pool[index] : this.pool;
},
add: function (item) {
this.pool.push(item);
//广播aModel.add事件
brick.broadcast('aModel.add', item);
},
remove: function (index) {
var item = this.pool.splice(index, 1);
//广播aModel.remove事件
brick.broadcast('aModel.remove', item);
}
};
});
//注册a控制器
brick.controllers.reg('aCtrl', function (scope) {
//观察aModel.add事件
scope.watch('aModel.add', function (e, msg) {
console.log('aModel.add callback', e, msg);
});
//观察aModel.remove事件
scope.watch('aModel.remove', function (e, msg) {
console.log('aModel.remove callback.');
});
//观察aModel.add 和 aModel.remove事件
//aModel.add 和 aModel.remove任一事件发生都会触发
//优先级最低,总是最后执行
scope.watch('aModel.*', function (e, msg) {
console.log('aModel.* callback', e, msg);
});
//观察aModle.add 和 aModel.remove事件的另一种写法
scope.watch('aModel.add,aModel.remove', function (e, msg) {
console.log('另一种写法.');
//广播一个事件
brick.broadcast('aCtrl','aCtrl 广播了一个事件.');
});
});
//注册b控制器
brick.controllers.reg('bCtrl', function (scope) {
//观察aCtrl事件
scope.watch('aCtrl', function (e, msg) {
console.log('aCtrl event callback.', msg);
})
});
查看以上代码效果