2013-09-29 50 views
7

什麼是主要好處backbone.wreqr已超過js 對象,兩種情況都可以訪問牽線木偶的Event Aggregator。
不會從對象分配/調用方法的方式與Commands/RequestResponse的方式相同。對我而言,除了賦予語義/可讀性+1之外,我認爲不需要實現這一點。Backbone.Wreqr vs Javascript對象

https://github.com/marionettejs/backbone.wreqr
有人請賜教,這是我的第一個骨幹(和模塊化)應用程序。

回答

12

的好處是:

  • 事件和命令的處理是可選的,您不必手動檢查自己的undefined小號
  • 任選的多個處理程序的每個事件
  • 命令的執行懶惰(火災事件第一,寄存器命令後,它會立即被執行)
  • 你可以使用任何其他方法來定義執行範圍,如$.proxy,...
+1

謝謝,我正在尋找!點#1,所以如果沒有處理程序存在,當command.execute(「黑洞」)被觸發時不會引發錯誤? –

+0

@toxinhead沒錯! – Creynders

8

它提供了若干常見messaging patterns的實現,包括Event Aggregator PatternCommand PatternObserver 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); 
} 
+1

嘿克里斯,謝謝你的回覆,儘管它沒有回答我最初的問題。您的示例揭示了Event Aggregator中包含的Subscriber/Publisher工作流程。 Wreqr's Commands/RequestResponse是我失去的東西,直到澄清這些方法僅出於語義/可讀性的原因而存在。 –

+0

哇,是的,我完全誤解了。抱歉。 –

+2

然而,這是一個了不起的評論。 –