2012-03-15 1 views
0

私はそのレンダリングメソッドに新しいバックボーンビューを作成する親のバックボーンビューを持っています。backbone.js:親ビューからカスタムビューをトリガできず、子ビューをバインドすることができません

var appView = Backbone.View.extend({ 
    ... 
    render: function() { 
     preview = new previewDataView({model: model, el: $el.find('.preview-container')}); 
    } 
}); 

私はappViewでカスタムイベントをトリガし、それにpreviewDataViewバインドを持つことができるようにしたい - これは可能ですか? previewDataView私はそれを試みたときにイベントを受信しませんでした。思考?

答えて

2

これを達成するには2つの方法があります。最初に、親を子ビューに渡します。次に、イベントの発生を処理するeventAggregatorを作成します。 FIRST

あなたはオプションとしてpreviewDataViewにAPPVIEWを渡すことができます。

あなたがそうのような親カスタムイベントに結合するあなたのpreviewDataViewで
preview = new previewDataView({ // your options, 'parent':this }); 

:SECOND

this.parent = this.options.parent; 
this.parent.bind('eventName', this.onEvent, this); 

:(ちょうどこの技術を学んだ)

あなたはあなたの意見を購読できますeventAggregatorを作成することができますお互いに意味のある出来事のために、そして、参加を解除してください。ここでスタックにこれを詳細に説明する良い答えがある:コメントでfire an event from one view to another in backbone

、@Brian Genisioは彼のコードでこれを含めるためにさらに一歩それを取る:

Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events); 

がスタートで、この実行を持っていますあなたのコードのすべてのビューはeventAggregatorにアクセスすることができます。このイベントは、ビュー全体でトリガーされ、受け取られる必要があるイベントの中心的なハブになります。あなたはこのようにそれを使用したい:これにより

// Parent View 
this.eventAggregator.trigger('someEvent'); 

// Child View 
this.eventAggregator.bind('someEvent', this.function, this); 

は、明示的にイベントがトリガとリスニングのためにお互いにアクセスする必要がビュー間参照を渡す必要はありません。この方法は私のために便利です。 :-)

+0

私はあまりにも、良い説明btw ..あなたのbackbone.jsプロジェクトは、ビューとトランジションでより複雑になった後、それらの事は本当にそのようなイベントを処理するパターンの方法を把握するのに役立ちます。 – mateusmaso

関連する問題