Backbone.js 主干和strophemuc插件:处理传入事件
我将收到发送到房间的最后一条消息,该消息也将显示在视图中,但如果在Strophe事件处理程序中出现新消息,则不会触发,尽管我通过电线看到传入消息节(连接上的xmlInput) 原因可能是什么 连接后,我创建MessageList并注册Strophe处理程序:Backbone.js 主干和strophemuc插件:处理传入事件,backbone.js,xmpp,strophe,Backbone.js,Xmpp,Strophe,我将收到发送到房间的最后一条消息,该消息也将显示在视图中,但如果在Strophe事件处理程序中出现新消息,则不会触发,尽管我通过电线看到传入消息节(连接上的xmlInput) 原因可能是什么 连接后,我创建MessageList并注册Strophe处理程序: Messages = new MessageList(); XMPPConnection.addHandler(Messages.onMessageReceived, null, "message", "groupchat"); XM
Messages = new MessageList();
XMPPConnection.addHandler(Messages.onMessageReceived, null, "message", "groupchat");
XMPPConnection.send($pres({to: "room@conference.server.local/user1"}).c("x", {xmlns: "http://jabber.org/protocol/muc"}));
window.App = new AppView();
MVC:
// ----------------- Message Model ----------------
var Message = Backbone.Model.extend({
body: "default message",
initialize: function(body) {
if (body) {
this.set({body: body});
}
}
});
// ----------------- Message Collection ----------------
var MessageList = Backbone.Collection.extend({
model: Message,
initialize: function(body) {
},
onMessageReceived: function(body) {
var message = new Message($(body).text());
Messages.add(message);
return true;
}
});
// ---------------- Message View -------------------
var MessageView = Backbone.View.extend({
tagName: "li",
template: _.template($("#message-template").html()),
events: {},
initialize: function() {
this.model.bind("change", this.render, this);
// this.model.bind("remove", this.remove, this);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
// ---------------- App View -------------------
var AppView = Backbone.View.extend({
el: $("#myapp"),
initialize: function() {
Messages.bind("add", this.addOneMessage, this);
this.main = $('#main');
},
addOneMessage: function(message) {
var view = new MessageView({model: message});
this.$("#message-list").append(view.render().el);
},
});
有几件事出了问题,以下是一些提示: 您的
消息
模型应写为:
var Message = Backbone.Model.extend({
defaults: {
body: "default message",
}
});
不需要初始化,如果您传递属性,它们将被分配
您的收藏:
var MessageList = Backbone.Collection.extend({
model: Message,
});
我还会将onMessageReceived放在MessageList之外:
var onMessageReceived = function(body) {
Messages.add({body: $(body).text()});
return true;
}
您的MessageView可以更简单,MUC消息不会更改,它们只是被添加:
var MessageView = Backbone.View.extend({
tagName: "li",
template: _.template($("#message-template").html()),
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});
希望这能给你足够的时间继续