0

render メソッドで新しいバックボーン ビューを作成する親バックボーン ビューがあります。

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

appViewカスタム イベントをトリガーしてバインドできるようにしたいのですが、previewDataViewこれは可能ですか? previewDataView私がそれを試みたとき、イベントを受け取りませんでした。考え?

4

1 に答える 1

2

2 つの方法でこれを達成できると思います。まず、親を子ビューに渡します。次に、イベントの発生を処理する eventAggregator を作成します。

最初:

オプションとして appView を previewDataView に渡すことができます。

preview = new previewDataView({ // your options, 'parent':this });

previewDataView では、次のように親カスタム イベントにバインドします。

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

2番目: (このテクニックを学んだばかりです)

ビューが相互に意図されたイベントをサブスクライブおよびサブスクライブ解除するのに役立つ eventAggregator を作成できます。スタックでこれを詳細に説明する良い答えは次のとおりです。バックボーンであるビューから別のビューにイベントを発生させます

コメントでは、@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);

これにより、イベントのトリガーとリッスンのために相互にアクセスする必要があるビュー間で参照を明示的に渡す必要がなくなります。この方法は、私にとって非常に便利です。:-)

于 2012-03-15T02:58:31.120 に答える