使用socket.io访问模型会导致骨干视图中的命名空间错误

时间:2013-01-10 20:41:13

标签: node.js backbone.js namespaces socket.io

我有一个关于在骨干视图中使用套接字的问题。

如何从套接字侦听器内部访问模型?我想做点什么...

  

window.SocketView = Backbone.View.extend({

initialize:function () {

     _.bindAll(this, 'render', 'updateModelFromServer'); 

    this.render();

},

render:function () {
    $(this.el).html(this.template());
    return this;
},

events: {

    "click #chageGlobalState"       : "updateModelFromServer"
},

updateModelFromServer: function() {

   socket.emit("globalState", 1);

   socket.on("updateState", function(data) {

        this.model.set("state", data);
    });
});
     

});

这会导致socket.io命名空间错误。 在套接字和模型之间共享数据的最佳方法是什么?

我缺少一个简单的语法问题吗?

或者我需要深入了解并使用......

事件聚合器? Backbone.ioBind?木偶? dnode?

这个项目是一个类似多媒体聊天的网络应用程序。

提前感谢!

1 个答案:

答案 0 :(得分:1)

看起来你正试图在套接字回调中使用错误的this

而不是这样做:

socket.on("updateState", function(data) {
    this.model.set("state", data);
});

尝试这样做:

socket.on("updateState", function(data) {
    this.model.set("state", data);
}.bind(this));