3
确定我有像在此PIC的布局:事件视图之间处理
MessageListView
:在屏幕的上部的表通过由
define(['backbone','collections/messages','views/message'], function(Backbone, MessageCollection, MessageView) {
var MessageListView = Backbone.View.extend({
el: '#messagesContainer',
initialize: function() {
this.collection = new MessageCollection();
this.collection.fetch({reset:true});
this.listenTo(this.collection, 'reset', this.render);
this.table = this.$el.find("table tbody");
this.render();
},
render: function() {
this.collection.each(function(message, index) {
this.renderMessage(message, index);
}, this);
},
renderMessage: function(message, index) {
var view = new MessageView({
model:message,
className: (index % 2 == 0) ? "even" : "odd"
});
this.table.append(view.render().el);
}
});
return MessageListView;
});
MessageView
define(['backbone','models/message'], function(Backbone, MessageCollection, MessageView) {
var MessageView = Backbone.View.extend({
template: _.template($("#messageTemplate").html()),
render: function() {
this.setElement(this.template(this.model.toJSON()));
return this;
},
events:{
'click':'select'
},
select: function() {
// WHAT TO DO HERE?
}
});
return MessageView;
});
APPVIEW
define(['backbone','views/messages'], function(Backbone, MessageList) {
var App = Backbone.View.extend({
initialize: function() {
new MessageList();
}
});
return App;
});
我很快就会在屏幕的下方添加一个新的视图(也许 “PreviewView”)。
我想在用户单击某行时在“PreviewView”内发生某些事情。
例如,在PreviewView中显示其他模型的属性(例如细节)可能很有趣。
最佳做法是什么?
- 在每个MessageView中持有对PreviewView的引用吗?
- 在选择方法内触发事件,并在预览视图中使用()进行监听。
- 在我的模型中使用瞬态“选定”属性,并使PreviewView收听“更改”事件?
谢谢,如果你需要更多的细节请告诉我,我会编辑的问题。
确定,但怎么样传递所选模型。 PreviewView如何知道集合上的哪个模型被选中?也许我可以将模型本身传递给事件总线? –
当然,触发器也接受参数:App.vent.trigger('PreviewView。show',model); –
在您看来,保持应用程序视图(顶层一)不知道底层视图正在做什么,并使用事件聚合器,因为您建议保持所有视图解耦....是更好还是让集合和所有东西应用程序视图? –