1

我有一个 signalR 服务器队列 hab。当在我的 SearchResultListItemView 视图中单击按钮时,我正在尝试启动服务器并向服务器发送消息。但无法工作,我收到错误“Uncaught TypeError: Cannot read property 'queue'”。

这是我的 SearchResultListItemView 视图,当点击事件发生时,我必须在其中调用 signalR 服务器。我只想在点击时向服务器发送一些价值。然后我将向所有其他客户端发送响应以加载更改。我怎样才能做到这一点?或者这里有什么问题?

window.SearchResultListItemView = Backbone.View.extend({
tagName: "tr",

initialize: function () {

    var _this = this;
    this.model.bind("change", this.render, this);
    this.model.bind("destroy", this.close, this);
    // here is the error occured in this line:
    var queue = $.connection.queue;

    // Start the connection
    $.connection.hub.start(function () {
        queue.ReloadQueueMember("Hello World!", "hi all");
    });
},

events: {
    "click a": "JoinQueue"
},

JoinQueue: function (e) {       
    e.preventDefault();
    var name = this.model.get("QueueName");
    var Id = this.model.get("CustomerId");

     //SignalR Proxy created on the fly
      queue.send(name, 'hannan19')
      .done(function () {
            console.log('Success!')
       })
       .fail(function (e) {
            console.warn(e);
       });
},

render: function () {
    var data = this.model.toJSON();
    _.extend(data, this.attributes);
    $(this.el).html(this.template(data));
    return this;
}
});

这是我的 SignalR 服务器:

public class Queue : Hub
{
    public void Send(string QueueName, string UserName)
    {
        Clients.ReloadQueueMember(QueueName, UserName);
    }
}
4

1 回答 1

0

要检查的几件事:

  • 确保您使用的是 NuGet 的最新版本(目前为 1.0.0-rc1;您需要选中“包含预发布”才能看到它)。

  • 如果$.connection未定义,请确保您正在加载静态 SignalR 客户端(目前,“jquery.signalR-1.0.0-rc1.js”)。检查您喜欢的浏览器的开发人员工具的“网络”选项卡,以确认已找到并加载它。

  • 如果$.connection.queue未定义,请确保您正在加载动态 SignalR 客户端 (~/signalr/hubs)。

  • 此行是错误的(如果您使用的是 1.0.0-rc1):

queue.ReloadQueueMember("Hello World!", "hi all");

它应该是:

queue.client.reloadQueueMember("Hello World!", "hi all");

  • 同样,这一行在 1.0.0-rc1 中也是错误的:

queue.send(name, 'hannan19')

它应该是:

queue.server.send(name, 'hannan19')

于 2012-12-31T20:17:45.250 回答