Сигнал R $ .connection.chatHub не определен в моем файле JavaScript - PullRequest
0 голосов
/ 31 октября 2018

'. ChatHub' не определен при загрузке страницы после того, как я переместил весь код сигнала r в пакет, который загружается на каждой странице

Я успешно установил singal r и могу отправлять сообщения чата от одного пользователя другому на моем сайте Asp.Net MVC. Но документация MS показывает реализацию только для одной страницы, теперь я хочу отправить сообщение другому пользователю на другой странице.

Поэтому я переместил код подключения / инициализации javascript-хаба в файл с именем my-chat.js, который загружается на каждую страницу, и поместил файл signal 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 ()

выглядит так, а ChatHub в $ .connection.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());
            });
        });
    });
};

Это правильный способ сделать это и, возможно,

"~ / signalr / концентраторы"

в пачке - это не то место, куда я должен ее положить?

Я тоже пытался поставить

<script src="/signalr/hubs" type="text/javascript"></script>

и

<script src="~/signalr/hubs" type="text/javascript"></script>

в разделе заголовка моей страницы макета, но это не сработало, из-за чего возникла ошибка: «невозможно получить proerty» signalR «undefined» или нулевая ссылка

1 Ответ

0 голосов
/ 31 октября 2018

Я решил эту проблему, переместив файлы сигналов R и все, что с ними связано, и поместил все это ниже последней области '@ Scripts.Render ()' в моем макете.

...