1

我对 javascript 中的 OOP 很陌生,这是我的外部 js 文件。

(function ($, connection) {    
"use strict";

var conn = connection.serverHub;
connection.hub.url = 'http://localhost:51283/signalr';

function trackUser(username, roleid, sessionid, ipaddress) {
    var page = document.location.pathname;        
    conn.server.joinUser(username, roleid, ipaddress, page, sessionid).done();
}

// signalr client method
conn.client.receivedNotification = function (item) {
    alert(item);
    conn.server.notifiedUser().done();
};
$(function () {
    connection.hub.start().done(function () {
        trackUser('<%= session("USERNAME")%>', '<%= session("ROLE")%>', '<%= Session.SessionID%>', '<%=Request.UserHostAddress%>');//da attivare solo in produzione
    }).fail(function () { alert("failed"); });
}); }(jQuery, $.connection));

这就是我调用我的方法的方式

<body>
<script src="http://localhost:51283/Scripts/jquery-1.9.1.min.js"></script>
<script src="http://localhost:51283/Scripts/jquery.signalR-1.0.0-rc2.min.js"></script>
<script src="http://localhost:51283/signalr/hubs"></script>
<script src="myexternaljs.js"></script>
<script>
    trackUser('<%= session("USERNAME")%>', '<%= session("ROLE")%>', '<%= Session.SessionID%>', '<%=Request.UserHostAddress%>');//da attivare solo in produzione
</script>
</body>

当我尝试调用 trackUser 方法并且我在未定义中获取 trackUser

我哪里做错了?

提前致谢

4

2 回答 2

4

您的函数是在匿名范围 ( function ($, connection) { }) 内定义的。在该范围之外将无法访问它。您可以创建一个全局变量,并将您的函数分配给它:

window.trackUser = function(username, roleid, sessionid, ipaddress) {
   ...
};
于 2013-02-11T15:41:46.940 回答
0

它是未定义的,因为它不在全局范围内。在匿名函数中添加window.trackUser = trackUser或将函数声明移动到全局范围。

于 2013-02-11T15:42:26.190 回答