控制器、服务之间通信 - 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);
        })
    });

查看以上代码效果