'.chatHub' 在我将所有信号 r 代码移动到每个页面上加载的包后,在页面加载时未定义
我已经成功安装了 singal r,并且可以在我的 Asp.Net MVC 站点中将聊天消息从一个用户发送到另一个用户。但是 MS 文档只显示了一个页面的实现,现在我想将消息发送给不同页面上的另一个用户。
因此,我将 javascript 集线器连接/初始化代码移动到名为 my-chat.js 的文件中,该文件会加载到每个页面上,并将信号 r js 文件和信号 r 集线器引用放在这样的包中
bundles.Add(new ScriptBundle("~/bundles/my-base").Include(
"~/Scripts/jquery.signalR-2.3.0.min.js",
"~/signalr/hubs",
"~/Scripts/my-base/my-chat.js"));
在我的布局页面中,它以正确的顺序加载,就像这样
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/my-base")
@RenderSection("scripts", required: false)
但是当我加载主页/第一页时,'my-chat.js' 调用
scope.initializeHub()
看起来像这样,'$.connection.chatHub' chatHub 是未定义的
scope.initializeHub = function () {
$(function () {
var chat = $.connection.chatHub;
chat.client.addNewMessageToPage = function (message) {
// do stuff
};
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
chat.server.send(scope.userId, $('#message').val());
});
});
});
};
这是正确的方法吗,也许是
“~/信号器/集线器”
在捆绑包中不是我应该放的地方吗?
我也试过把
<script src="/signalr/hubs" type="text/javascript"></script>
和
<script src="~/signalr/hubs" type="text/javascript"></script>
在我的布局页面的头部,但那不起作用,抛出一个错误,说“无法获得未定义的属性‘signalR’”或空引用