Fab*_* B. 3 backbone.js backbone-events backbone-views
好的,我有一个像这张照片中的布局:

屏幕上方的表格由:
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;
});
Run Code Online (Sandbox Code Playgroud)
消息查看
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;
});
Run Code Online (Sandbox Code Playgroud)
APPVIEW
define(['backbone','views/messages'], function(Backbone, MessageList) {
var App = Backbone.View.extend({
initialize: function() {
new MessageList();
}
});
return App;
});
Run Code Online (Sandbox Code Playgroud)
我很快就会在屏幕的下半部分添加一个新视图(可能是"PreviewView").
我想在用户点击一行时在"PreviewView"中发生一些事情.
例如,在PreviewView中显示其他模型的属性(例如细节)可能会很有趣.
什么是最佳做法?
谢谢,如果您需要更多详细信息请告诉我,我会编辑问题.
不确定最佳实践,但我发现这个解决方案很容易实现.我创建了一个全局消息传递对象,总线,等等:
window.App = {};
window.App.vent = _.extend({}, Backbone.Events);
Run Code Online (Sandbox Code Playgroud)
您必须在先前创建的事件总线上注册PreviewView的"可触发"功能(根据您的示例,这应该在PreviewView):
initialize: function () {
App.vent.on('PreviewView.show', this.show, this);
}
Run Code Online (Sandbox Code Playgroud)
现在你应该可以通过调用触发任何从你的应用程序中的任何地方注册事件:App.vent.trigger.例如,当用户单击某行时,您将获得类似的内容:
App.vent.trigger('PreviewView.show');
Run Code Online (Sandbox Code Playgroud)
万一你必须发送和对象与触发事件一起使用:
App.vent.trigger('PreviewView.show', data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |