converse.js chatBoxInitialized 事件什么时候实际发出?

When does converse.js chatBoxInitialized event actually emit?

我正在尝试在 converse.js 聊天框(标题、删除头像、聊天框宽度)之前配置一些设置 "rendering" 并显示聊天框。

虽然没有明确说明,但我认为 "chatBoxInitialized" 事件会在创建聊天框 object 之后,但在呈现和显示之前触发。

我发现当调用该事件的处理程序函数时,聊天框已经显示,很明显我对 "chatboxinitialized" 的理解是不完整的。在处理程序中,我使用了聊天框 object 中可用的方法,例如

chatbox.setChatBoxWidth(350);
chatbox.model.attributes.fullname = data;

设置聊天框属性,但是当语句执行并产生瞬间效果时,一旦处理函数完成,某些东西就会将这些值设置回来,并且框 "re-renders" 并显示为我之前的状态函数 运行.

是否有更合适的事件可以注册以便在聊天框呈现之前设置这些值?是否有更合适的 "chatbox set functions" 可以用来正确设置诸如大小之类的东西,并关闭头像,而不是直接进入 DOM 并在事后进行操作?

如有任何帮助,我们将不胜感激。

如果您查看代码,您会看到 chatBoxInitialized 在 聊天框的 HTML 已经呈现后 被触发。

看这里:https://github.com/jcbrand/converse.js/blob/393bbe020e45ccd2abe10683117a8f854dea9145/src/converse-chatview.js#L281

查看代码,我没有看到在创建聊天框之后但在呈现之前触发的任何事件。

但是,在converse.js当前的主分支(即将发布)中,您可以在创建聊天框后设置全名,它将然后正常出现。

不过你设置错了。对于 Backbone.js,您必须使用 getset 而不是 attributes 属性.

所以这个:

chatbox.model.attributes.fullname = data; 

必须改成这样:

chatbox.model.set({'fullname': data});

关于设置聊天框宽度,我认为最好的方法是设置相关的 Sass 变量,参见此处:

https://github.com/jcbrand/converse.js/blob/393bbe020e45ccd2abe10683117a8f854dea9145/sass/converse/_variables.scss#L111

然后运行make css生成新的CSS.