0

ビューにも表示される部屋に送信された最後のメッセージを取得しますが、新しいメッセージが着信した場合、Strophe イベントハンドラーは起動しませんが、ネットワーク経由で着信メッセージスタンザ (接続の xmlInput) が表示されます。

その理由は何でしょうか?

接続後、MessageList を作成し、Strophe ハンドラを登録します。

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

1 に答える 1

1

うまくいかないことがいくつかあります。ここにいくつかのヒントがあります。

モデルMessageは次のように記述します。

var Message = Backbone.Model.extend({
  defaults: {
      body: "default message",
  }
});

初期化の必要はありません。属性を渡すと、割り当てられます。

あなたのコレクション:

var MessageList = Backbone.Collection.extend({
    model: Message,
});

また、MessageList の外に onMessageReceived を配置します。

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

うまくいけば、これで十分に続けることができます...

于 2012-06-28T05:46:24.513 に答える