gpt4 book ai didi

backbone.js - View 之间的事件处理

转载 作者:行者123 更新时间:2023-12-01 10:52:19 26 4
gpt4 key购买 nike

好的,我有一个像这张照片中的布局:

Layout

屏幕上部的表格由:

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;
});

消息 View

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;
});

应用 View

define(['backbone','views/messages'], function(Backbone, MessageList) {
var App = Backbone.View.extend({
initialize: function() {
new MessageList();
}
});
return App;
});

我很快会在屏幕下方添加一个新 View (可能是“PreviewView”)。

我想在用户点击一行时在“PreviewView”中发生一些事情。

例如,在 PreviewView 中显示其他模型的属性(例如细节)可能会很有趣。

最佳做法是什么?

  • 在每个 MessageView 中持有对 PreviewView 的引用?
  • 在 select 方法中触发事件,并在预览 View 中使用 on() 监听它们。
  • 在我的模型中使用一个 transient “selected”属性,并让 PreviewView 监听集合“change”事件?

谢谢,如果您需要更多详细信息,请告诉我,我会编辑问题。

最佳答案

不确定最佳实践,但我发现此解决方案实现起来微不足道。我创建了一个全局消息传递对象、总线等:

window.App = {};
window.App.vent = _.extend({}, Backbone.Events);

您必须在先前创建的事件总线上注册 PreviewView 的“可触发”功能(根据您的示例,这应该在 PreviewView 中):

initialize: function () {
App.vent.on('PreviewView.show', this.show, this);
}

现在,您应该能够通过调用 App.vent.trigger 从应用程序中的任何位置触发任何已注册的事件。例如,当用户单击一行时,您将看到类似的内容:

App.vent.trigger('PreviewView.show');

如果您必须发送和反对与触发的事件一起使用:

App.vent.trigger('PreviewView.show', data);

关于backbone.js - View 之间的事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17589186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com