2013-09-29 22 views
7

Quali sono i principali vantaggi backbone.wreqr ha più di un oggetto js , entrambi i casi che hanno accesso alle aggregatore eventi di marionetta.
Non sarebbe assegnare/chiamando i metodi di un oggetto funzionano allo stesso modo come comandi/RequestResponse. Per me non vedo la necessità di implementare questo oltre a dare semantica/leggibilità a +1.Backbone.Wreqr vs JavaScript Object

https://github.com/marionettejs/backbone.wreqr
Qualcuno può per favore illuminarmi, questa è la mia prima applicazione di dorsale (e modulare).

risposta

12

I vantaggi sono:

  • evento e il comando movimentazione è opzionale e non è necessario controllare manualmente se stessi per undefined s
  • opzionalmente più gestori per ogni evento
  • esecuzione artificiale di comandi (evento fuoco primo registro successivo comando e sarà immediatamente eseguito)
  • è possibile definire l'ambito di esecuzione senza utilizzare metodi aggiuntivi come $.proxy, ...
+1

Grazie, proprio quello che stavo cercando! Punto n. 1, quindi se non è presente alcun gestore, non verranno generati errori quando viene attivato command.execute ("blackhole")? –

+0

@toxinhead che è di destra! – Creynders

8

Fornisce implementazioni di diversi numeri comuni messaging patterns, incluso Event Aggregator Pattern, Command Pattern e Observer Pattern.

Questi modelli facilitano disaccoppiamento di implementazioni per ridurre le dipendenze degli oggetti. Considera un semplice gioco in stile "Combattimento" composto da un carro armato e diversi bersagli. Senza modelli di messaggistica, il serbatoio deve avere conoscenza esplicita circa gli obiettivi e come funzionano, e infatti non può esistere senza la definizione 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]); 

usando i modelli di messaggistica come osservatore, tank nel codice sopra doesn' t bisogno di conoscenza dei suoi obiettivi; piuttosto, gli obiettivi possono determinare da soli se devono morire:

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

Ehi Chris, grazie per la risposta, anche se non risponde alla mia domanda iniziale. Il tuo esempio sta rivelando il flusso di lavoro del Sottoscrittore/Publisher contenuto in Event Aggregator. I comandi di Wreqr/RequestResponse sono ciò che mi fa perdere, fino a che questi metodi esistono solo per ragioni di semantica/leggibilità. –

+0

Wow, sì, ho completamente frainteso quello. Scusate. –

+2

Questo è comunque un commento fantastico. –