gpt4 book ai didi

javascript - Backbone 的 delegateEvents 在附加到 DOM 之前不会绑定(bind)事件

转载 作者:行者123 更新时间:2023-12-03 10:04:07 26 4
gpt4 key购买 nike

我正在开发一个聊天客户端,并且遇到了 Backbone 事件系统的问题。

当客户端启动时,我将 View 呈现如下:

var view = new ServerListView({collection: Chatter.servers});
Chatter.Views.servers = view;
$('#channels > ul').html(view.render().el);

工作正常,事件被调用。说到事件,这些是:

 events: {
"click .server": "server",
"click .server ul li": "channel",
"click .server .slider": "slide"
},

有问题的渲染方法:

render: function(){
var self = this;
this.$el.html("");
this.collection.each(function(server){
self.$el.append(self.template(server.toJSON()));
var header = self.$el.find('li.server[data-id="' + server.id + '"]')
var connection = Chatter.Connections[server.id];
if (connection) {
if (connection.channels.length > 0) {
connection.channels.each(function(channel) {
$(header).find("ul").append("<li data-channel-id=\"" + channel.id + "\">" + channel.get('name') + "</li>");
}, self);
}
}

}, self);
this.delegateEvents();
return self;
},

每次调用时,它都应该正确重新渲染所有服务器和 channel 的 View 。一切都正确呈现,但事件没有被调用。

我按照渲染它的方式重新渲染它:

$('#channels > ul').html(Chatter.Views.servers.render().el);

出于某种原因,渲染时没有调用上述事件,有什么想法吗?

谢谢

编辑:我忘了提及一件事:

如果我重新渲染它:

var view = Chatter.Views.servers;
$('#channels > ul').html(view.render().el);
view.delegateEvents();

然后它工作得很好,我知道那没问题,但我 99% 确定我不应该这样做,而且我不想每次我重新启动时都必须这样做渲染 View 。

再次感谢。

最佳答案

This stackoverflow question might help.你有 View 的初始化函数吗?也许初始化函数可以接受一个参数(指定 View 应呈现到何处的 jQuery 对象),以便它将自身呈现到页面上的正确位置,然后如果事件不是“,则可以在初始化函数中委托(delegate)事件”自动委派。

无论如何,我很想听听其他人的意见。

关于javascript - Backbone 的 delegateEvents 在附加到 DOM 之前不会绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447064/

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