什麼是主要好處backbone.wreqr已超過js 對象,兩種情況都可以訪問牽線木偶的Event Aggregator。
不會從對象分配/調用方法的方式與Commands/RequestResponse的方式相同。對我而言,除了賦予語義/可讀性+1之外,我認爲不需要實現這一點。Backbone.Wreqr vs Javascript對象
https://github.com/marionettejs/backbone.wreqr
有人請賜教,這是我的第一個骨幹(和模塊化)應用程序。
什麼是主要好處backbone.wreqr已超過js 對象,兩種情況都可以訪問牽線木偶的Event Aggregator。
不會從對象分配/調用方法的方式與Commands/RequestResponse的方式相同。對我而言,除了賦予語義/可讀性+1之外,我認爲不需要實現這一點。Backbone.Wreqr vs Javascript對象
https://github.com/marionettejs/backbone.wreqr
有人請賜教,這是我的第一個骨幹(和模塊化)應用程序。
的好處是:
undefined
小號$.proxy
,...它提供了若干常見messaging patterns的實現,包括Event Aggregator Pattern,Command Pattern和Observer Pattern。
這些模式有助於解耦實現以減少對象依賴性。考慮一個簡單的「戰鬥」風格的遊戲,包括坦克和幾個目標。如果沒有消息模式,坦克需要有關於目標,以及它們如何工作的顯性知識,而事實上沒有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]);
使用通訊模式,如觀察,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);
}
嘿克里斯,謝謝你的回覆,儘管它沒有回答我最初的問題。您的示例揭示了Event Aggregator中包含的Subscriber/Publisher工作流程。 Wreqr's Commands/RequestResponse是我失去的東西,直到澄清這些方法僅出於語義/可讀性的原因而存在。 –
哇,是的,我完全誤解了。抱歉。 –
然而,這是一個了不起的評論。 –
謝謝,我正在尋找!點#1,所以如果沒有處理程序存在,當command.execute(「黑洞」)被觸發時不會引發錯誤? –
@toxinhead沒錯! – Creynders