可能的范围界定问题

一个可能的node.js / backbone.js / socket.io范围问题我不能包裹我的头。

(片段) server.js

var app = express(); var server = http.createServer(app); io = io.listen(server); 

(摘录自 index.html)

 <script type="text/javascript" src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(window.location.origin); </script> 

(摘录自) js / views / map.js

 (function() { // self invoking anonymous function so we are able to // create the private variable "map" that can be shared here var map; var webSocket = window.socket; window.MapView = Backbone.View.extend({ initialize: function() { this.render(); webSocket.on("marker dropped", this.propNewMarker); }, events: { "click .dropmarker" : "dropMarker" }, dropMarker: function(event) { console.log("This fires!!!"); webSocket.emit('marker dropped', { my: 'data' }); }, propNewMarker: function() { console.log("someone dropped a marker (im in map.js)"); }, 

(摘录) MapView.html

 <a href="#" class="btn btn-primary dropmarker">Drop marker</a> 

行为我要去

点击MapView.html中的“dropmarker”button应该启动dropMarker中的webSocket.emit动作。 (它会在没有任何问题的情况下触发console.log)

经testing

当我添加

 io.sockets.emit('marker dropped', { 'message': 'ello wurldz' }); 

到server.js中, map.js中的propNewMarker函数被正确触发。

初步结论

看来,我正在努力在button级别的范围问题。 我无法在那里发起一个websocket事件。

有什么想法吗 ? 还是应该在debugging之前在代码中提供更多的见解? (尽可能保持干净)

这看起来不是范围问题,但实际上你是如何使用套接字

为了使propNewMarker被调用, 服务器必须发出marker dropped的消息

在服务器上,如果你添加

 io.sockets.on('connection', function (socket) { socket.on('marker dropped',function(msg){ socket.emit('marker dropped',msg); }); }); 

那么客户应该对事件做出回应。 我做了一些testing,看起来你的范围很好。