Backbone.Wreqr与Javascript对象

Ric*_*yce 7 javascript eventaggregator backbone.js marionette

backbone.wreqr对js 对象有哪些主要好处,两种情况都可以访问牵线木偶的事件聚合器.
不会从对象分配/调用方法的工作方式与Commands/RequestResponse相同.对我来说,除了给语义/可读性+1之外,我认为没有必要实现这一点.

https://github.com/marionettejs/backbone.wreqr
有人可以赐教,这是我的第一个骨干(和模块化)应用程序.

Cre*_*ers 12

好处是:

  • 事件和命令处理是可选的,您不需要自己手动检查undefineds
  • 每个事件可选择多个处理程序
  • 延迟执行命令(先激活事件,稍后再注册命令,它会立即执行)
  • 您可以使用任何其他方法定义执行范围,例如$.proxy,...


Chr*_*tta 8

它提供了几种常见消息传递模式的实现,包括事件聚合器模式,命令模式观察者模式.

这些模式有助于实现的分离以减少对象依赖性.考虑一个简单的"战斗"风格游戏,包括坦克和几个目标.如果没有消息传递模式,坦克需要有关于目标及其工作方式的明确知识,事实上如果没有target定义,就不可能存在:

var Tank = function(targets) { this.targets = targets };
Tank.prototype.fire = function() {
    var self = this,
        HpLoss = -500;
    _.each(this.targets, function(target) {
    if (self.isNear(target.coordinates) && target.canWithstand(HpLoss)) {
          target.die();
    }
}


var target1 = new Target(coordinatesA, armorA);
var target2 = new Target(coordinatesB, armorB);
var tank = new Tank([target1, target2]);
Run Code Online (Sandbox Code Playgroud)

tank在上面的代码中使用Observer等消息传递模式不需要了解其目标; 相反,目标可以自行确定是否应该死:

var Target = function() {}
Target.prototype.calculateDamage = function(coordinates, damage) {
    if (this.isNear(coordinates) && !this.canWithstand(damage)) {
        this.die();
    }
}

var Tank = function() {};
Tank.prototype.fire = function() {
    this.trigger('fire', { damage: 400, coordinates: this.location });
};

// Now Tank is entirely self-contained, and some external mediator can 
// make things happen at will:

function main() {
    var target1 = new Target(coordinatesA, armorA);
    var target2 = new Target(coordinatesB, armorB);
    var tank = new Tank();

    target1.listenTo(tank, 'fire', target1.calculateDamage, target1);
    target2.listenTo(tank, 'fire', target2.calculateDamage, target2);

    tank.fire();

    var target3 = new Target3(coordinatesB, armorB);
    target3.listenTo(tank, 'fire', target3.calculateDamage, target3);
}
Run Code Online (Sandbox Code Playgroud)

  • 然而,这是一个了不起的评论. (2认同)