可能的范围界定问题
一个可能的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,看起来你的范围很好。