Javascript 使用SignalR连接敲除(对象不支持属性或方法)

Javascript 使用SignalR连接敲除(对象不支持属性或方法),javascript,knockout.js,signalr,signalr-hub,Javascript,Knockout.js,Signalr,Signalr Hub,启动我的应用程序时出现以下js错误(在代码行中标记为####): JavaScript runtime error: Object doesn't support property or method 'messages' 我以前在没有淘汰赛的情况下也能做到这一点,但我正在尝试加入淘汰赛,因为我觉得从长远来看,这将更容易保持。我怀疑这是我第一次尝试信号员和击倒,我做了一些愚蠢的事情,所以任何指示都请告诉我。mappedMessages数据已完全填充,仅当它尝试设置self.messages时才

启动我的应用程序时出现以下js错误(在代码行中标记为####):

JavaScript runtime error: Object doesn't support property or method 'messages'
我以前在没有淘汰赛的情况下也能做到这一点,但我正在尝试加入淘汰赛,因为我觉得从长远来看,这将更容易保持。我怀疑这是我第一次尝试信号员和击倒,我做了一些愚蠢的事情,所以任何指示都请告诉我。mappedMessages数据已完全填充,仅当它尝试设置self.messages时才出现问题。淘汰赛3.0.0,信号机1.1.3

完整的javascript代码如下所示:

$(function () {

    var messageHub = $.connection.messageHubMini;

    function init() { }


    function Message(data) {
        this.Operator = ko.observable(data.Operator);
        this.text = ko.observable(data.Text);
    }

    function MessagesViewModel() {
        // Data
        var self = this;
        self.messages = ko.observableArray([]); //### message on this line
    }

    // Add a client-side hub method that the server will call
    messageHub.client.updateMessages = function (data) {

        var mappedMessages = $.map(data, function (item) { return new Message(item) });
        self.messages(mappedMessages);
    }

    // Start the connection
    $.connection.hub.start().done(init);

    ko.applyBindings(new MessagesViewModel());
});

谢谢:)

您应该在SignalR客户端方法中使用viewModel对象。当前,您正在尝试使用一个名为
self
的变量,但该变量在SignalR客户端方法范围内不可用。我已将您的代码更新为一个版本,我相信该版本可以解决您的问题,只需做尽可能少的更改

$(function () {

    var messageHub = $.connection.messageHubMini;

    function init() { }


    function Message(data) {
        this.Operator = ko.observable(data.Operator);
        this.text = ko.observable(data.Text);
    }

    function MessagesViewModel() {
        // Data
        var self = this;
        self.messages = ko.observableArray([]); //### message on this line
    }

    var viewModel = new MessagesViewModel();

    // Add a client-side hub method that the server will call
    messageHub.client.updateMessages = function (data) {

        var mappedMessages = $.map(data, function (item) { return new Message(item) });
        viewModel.messages(mappedMessages);
    }

    // Start the connection
    $.connection.hub.start().done(init);

    ko.applyBindings(viewModel);
});

@这只是一个打字错误。在创建viewModel的那一行,他意外地将
viewModel
中的W大写。我已经纠正了。嗨@xdumain-是的,我实际上已经克服了这一点,谢谢,在清洁(vs)解决方案并进行另一次重击之后,它工作得很好。干杯:)