2012-04-07 4 views
2

。私は誰かが概念に精通していることを願っています。私は変数を読み込もうとしています(例えば、私のの例ではのrenderCompleteのファサードのセクションです) 関数?APPVIEWバックボーンファサード/ Mediatorパターンチャレンジ

にconsole.log(this.i)の;ので、私はどこか

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; 
}); 

答えて

2

あなたが「masterRendered」通知を公開すると、あなたが渡しているスコープを失ってしまった推測している未定義を返します。現在のビューへの参照を2番目のパラメータ(this)と呼びます。この2番目のパラメータは、renderCompletで定義したコールバック関数に渡されますe。

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

の代わりに::

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

あなたは初期化子でこのような何かを行うことによって、あなたのビューのコンテキストにあなたのファサード・メソッドをバインドする必要がよろしく

0

ですから、このような何かを書く必要があります表示のために:

initialize: function() 
{ 
    _.bindAll(this, "facade.routeChange", "facade.renderComplete"); 
} 

私は_.bindAllがこのケースを処理できるかどうかここでバインドする関数は別のオブジェクトのプロパティです。

関連する問題