【发布时间】:2014-10-07 17:37:15
【问题描述】:
所以我正在尝试使用 io.socket 对某些控制器操作进行 POST 调用。奇怪的是,当我在这样的脚本标签中使用io.socket.someMethod() 时,它工作正常:
<script>
io.socket.post('/visualization/star', { id: visualID }, function (resData, jwres) {
var star = document.getElementById("star-" + visualID.toString());
if (star.className == "gold-star glyphicon glyphicon-star-empty md") {
star.className = "grey-star glyphicon glyphicon-star-empty md";
} else {
star.className = "gold-star glyphicon glyphicon-star-empty md";
}
});
</script>
但是将它放在函数声明中会使io.socket 变为undefined:
<script>
function starVisual(visualID) {
io.socket.post('/visualization/star', { id: visualID }, function (resData, jwres) {
var star = document.getElementById("star-" + visualID.toString());
if (star.className == "gold-star glyphicon glyphicon-star-empty md") {
star.className = "grey-star glyphicon glyphicon-star-empty md";
} else {
star.className = "gold-star glyphicon glyphicon-star-empty md";
}
});
}
</script>
将alert(io.socket) 放在函数声明之外会产生一个对象,而将它放在函数声明内的第一行会产生undefined。
我也尝试过window.io.socket,但结果相同。当页面首次通过我的layouts.ejs 加载时,JS 文件sails.io.js 已包含并在开始时正确加载。也尝试过<script>window.io = io</script> 无济于事。
我将它放在函数声明中,以便在单击图标时将其用作 onclick 属性的一部分:
<td class="star-wrap"><span id="star-<%= visualization.id %>" class="grey-star glyphicon glyphicon-star-empty md" onclick="starVisual(<%= visualization.id %>).bind(this);"></span></td>
任何帮助将不胜感激!
【问题讨论】:
标签: javascript node.js sockets sails.js