启动我的应用时,我收到以下js错误(在标有###的代码行上):
JavaScript runtime error: Object doesn't support property or method 'messages'
我以前没有淘汰赛,但我试图添加淘汰赛,因为我觉得从长远来看这将更容易维护。我怀疑,因为这是我第一次进入SignalR和Knockout,我做了一些令人眼花缭乱的事情,所以任何指针都请告诉我。 mappedMessages数据已完全填充,只是在它尝试设置self.messages时才会出现问题。淘汰赛3.0.0,SignalR 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());
});
谢谢:)
答案 0 :(得分:2)
您应该在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);
});