コレクションのbboneビューでのユーザーの操作によってトリガーされるカスタムイベントがあり、それが別の無関係なビューでの変更を通知するようにしたいと思います。このために、私はカスタムイベントを使用します。
//a global event object for my pub-sub model
var vent = Backbone.extend({}, Backbone.Event);
var C1 = Backbone.Collection.extend();
var V1 = Backbone.View.extend(
events: {
'click .appointment': 'clickCallback'
},
clickCallback: function(){
vent.trigger('appointment:selected', apptProps);
}
);
var c1Obj = new C1([{...}, {...}]);
var v1Obj = new V1({
collection: c1Obj
});
したがって、ユーザーがコレクションビューv1Objの.appointment要素をクリックすると、appointment:selectedイベントがアナウンスされます。
ここで、別のビューV2がこのイベントに反応するようにします。「appointment:selected」イベントにバインドするのに最適な場所はどこですか?ビューV2のinitialize()(CASE 1)またはV2のコレクション/モデルのinitialize()(CASE 2)または他の場所で?もしあれば、ベストプラクティスを明確にしようとしています。
ケース1:
var V2 = Backbone.View.extend(
initialize: function(){
vent.on('appointment:selected', this.apptSelected, this);
},
appSelected: function(apptProps){
...
}
);
ケース2:
var C2 = Backbone.Collection.extend(
initialize: function(){
vent.on('appointment:selected', this.apptSelected, this);
},
appSelected: function(apptProps){
...
}
);
私が理解している限り、ユーザー操作時のBboneの哲学は、データを操作し、マークアップを変更しないことです。つまり、データの変更はビューにカスケードされます。もしそうなら、元の質問への答えはケース2ですか?