【发布时间】:2013-07-11 08:58:08
【问题描述】:
好的,我有一个像这张图片中的布局:
屏幕上方的表格由:
消息列表视图
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;
});
消息视图
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 的引用?
- 在 select 方法中触发事件,并在预览视图中使用 on() 监听它们。
- 在我的模型中使用瞬态“选定”属性,并使 PreviewView 监听集合“更改”事件?
谢谢,如果您需要更多详细信息,请告诉我,我会编辑问题。
【问题讨论】:
标签: backbone.js backbone-views backbone-events