0

'.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’”或空引用

4

1 回答 1

0

我通过将信号 R 文件和所有相关内容从包中移出并将其全部放在布局中的最后一个“@Scripts.Render()”区域下方来解决了这个问题。

于 2018-10-31T00:57:26.583 回答