与 js对象相比, backbone.wreqr的主要好处是什么,这两种情况都可以访问木偶的事件聚合器。
从对象分配/调用方法的工作方式与命令/请求响应不同。对我来说,除了给语义/可读性+1之外,我认为没有必要实现这一点。
https://github.com/marionettejs/backbone.wreqr
有人可以启发我吗,这是我的第一个主干(和模块化)应用程序。
与 js对象相比, backbone.wreqr的主要好处是什么,这两种情况都可以访问木偶的事件聚合器。
从对象分配/调用方法的工作方式与命令/请求响应不同。对我来说,除了给语义/可读性+1之外,我认为没有必要实现这一点。
https://github.com/marionettejs/backbone.wreqr
有人可以启发我吗,这是我的第一个主干(和模块化)应用程序。
好处是:
undefined
s$.proxy
,...它提供了几种常见消息传递模式的实现,包括事件聚合器模式、命令模式和观察者模式。
这些模式促进了实现的解耦以减少对象依赖性。考虑一个由坦克和几个目标组成的简单“战斗”风格游戏。如果没有消息传递模式,坦克需要对目标及其工作方式有明确的了解,事实上,没有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]);
在上面的代码中使用 Observer 等消息传递模式tank
不需要了解其目标;相反,目标可以自己决定他们是否应该死:
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);
}