我正在创建一个后端服务,它将新文章写入数据库,并在完成后,在前端层发布对侦听客户端的更改。我的问题是这些BE更新不会在前端层触发我的订阅者。
直接测试TaskHub(signalR后端asp.net hub)层似乎工作正常,但UI没有更新。各个层的相关代码如下(我可能会遗漏一两件事 - 询问是否有问题)。
事情的顺序:
首先在客户端调用它:
var taskHub = $.connection.taskHub;
$.connection.hub.start();
然后我有这个Knockout函数来进行更新:
self.AddQuickNews = function() {
taskHub.server.AddAndUpdateQuickNews(self.newContent()); /just a string
}
在ASP.NET后端,我有以下方法来处理这个问题:
public void AddAndUpdateQuickNews(string newContent)
{
ArticleServices.AddQuickNews(newContent); //add a new record
var quicknews = ArticleServices.GetQuickNews(); // get all records
Clients.All.updateQuickNews(quicknews); // pass back to clients
}
在客户端处理结果:
taskHub.client.UpdateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
XHR调用以测试后端
self.AddQuickNews = function () {
var url = 'api/MainPage/AddQuickNews';
var params = "?content=" + self.newContent();
$.ajax({
url: url + params,
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
taskHub.server.updateQuickNews(data);
},
error: function () {
//alert("error");
}
});
}
答案 0 :(得分:2)
我看到它的方式,因为当你在客户端声明监听器时,你在第一个字母中使用大写字母。 SignalR
中不允许此行为。你必须改变你的听众:
taskHub.client.updateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
taskHub.server.addAndUpdateQuickNews(self.newContent()); /just a string
希望这会对你有所帮助