2012-04-07 6 views
2

Ich bin liebäugelt mit der Aura um (http://github.com/addyosmani/backbone-aura) Beispiel für das Implementieren Fassade und Mediator Muster in Backbone.js. Ich hoffe, jemand ist vertraut mit dem Konzept .. Ich versuche, Variablen zu lesen (zum Beispiel i in diesem Beispiel in der renderComplete Abschnitt der Fassade. Wie kann ich (wenn überhaupt möglich) Zugriff auf die Funktionen/Variablen von AppViewBackbone Fassade/Mediator-Muster Herausforderung

die console.log (this.I);? gibt eine undefinierte so vermute ich, i Umfang irgendwo

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'text!templates/master.html', 
    '../aura/mediator', 
    '../aura/facade', 
    '../subscriptions' 
], function($, _, Backbone, masterTemplate, Mediator, Facade){ 

var AppView = Backbone.View.extend({ 
    el: "body", 
    i : 5, 

    template: _.template(masterTemplate), 

    facade: { 
    routeChange: Facade.extend("masterViewChange", "routeChanged", function(route){ 
     console.log("Change view to " + this.i); 
    }), 
    renderComplete: Facade.extend("postMasterRender", "masterRendered", function(){ 
     console.log(this.i); 
    }) 
    }, 

    events: {}, 

    initialize: function() { 
    this.render(); 
    Mediator.publish("masterRendered", this); 
    }, 

    render: function() { 
    $(this.el).html(this.template()); 
    } 

}); 
    return AppView; 
}); 

Antwort

2

verloren haben Wenn Sie die 'masterRendered' Benachrichtigung veröffentlichen, Ihre sind vorbei ein Verweis auf die aktuelle Ansicht als zweiter Parameter (this) Dieser zweite Parameter wird an die Callback-Funktion übergeben, die Sie in renderComplet definiert haben e. Sie müssen also so etwas schreiben:

function (obj) { console.log(obj.i); } 

Statt:

function() { console.log(this.i); } 

Grüße

0

Sie benötigen eine Fassade Methoden auf Ihre View-Kontext zu binden, indem so etwas wie dies in der Initialisierungsliste tun für die Ansicht:

Obwohl ich Frage, ob _.bindAll kann diesen Fall umgehen Die Funktion, die Sie binden möchten, ist eine Eigenschaft eines anderen Objekts.