我有以下代码,它似乎不是调用客户端和更新KnockOutJS视图模型的信息。 GetOuting()在页面加载时被调用,并将正确的信息输入到视图模型中。 Chrome在开发者工具中没有显示JS错误。从那时起,我很难找出如何排除故障。任何帮助表示赞赏。 SignalR集线器试图impinment SignalR与淘汰ViewModel
public class Outings : Hub
{
private static Dictionary<Guid, OutingViewModel> outings = new Dictionary<Guid, OutingViewModel>();
public void GetOuting(string id)
{
var guidID = new Guid(id);
bool containsOuting = outings.ContainsKey(guidID);
if (!containsOuting)
{
var outingAccessor = new OutingAccessor();
outingAccessor.ID = guidID;
outingAccessor.Load();
var outingVM = new OutingViewModel(outingAccessor);
outings.Add(guidID, outingVM);
}
var outing = outings[guidID];
this.Clients.updateOuting(outing);
}
public void SaveOuting(string outingNumber, OutingViewModel outing)
{
var guidID = new Guid(outingNumber);
outings[guidID] = outing;
this.Clients.updateOuting(outing);
}
}
视图模型
public class OutingViewModel
{
public OutingViewModel(OutingAccessor outingAccessor)
{
ID = outingAccessor.ID;
OutingNumber = outingAccessor.OutingNumber;
var outingGeneralAccessor = new OutingGeneralAccessor();
var outingGeneral = outingGeneralAccessor.GetOutingGeneralByOutingID(outingAccessor.ID);
this.OutingName = outingGeneral.Name;
}
public Guid ID { get; set; }
public int OutingNumber { get; set; }
public string OutingName { get; set; }
}
HTML + JavaScript的
@model string
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"> </script>
<script src="@this.Url.Content("~/Scripts/jquery.signalR.js")" type="text/javascript"> </script>
<script src="@this.Url.Content("~/Scripts/knockout.js")" type="text/javascript"> </script>
<script type="text/javascript" src="/signalr/hubs"> </script>
<script type="text/javascript">
$(function() {
function outingDataViewModel() {
this.hub = $.connection.outings;
this.ID = ko.observable();
this.OutingNumber = ko.observable();
this.OutingName = ko.observable();
//Initializes the view model
this.init = function() {
this.hub.getOuting('@this.Model');
};
this.hub.updateOuting = function(data) {
ID(data.ID);
OutingName(data.OutingName);
OutingNumber(data.OutingNumber);
};
}
var vm = new outingDataViewModel();
ko.applyBindings(vm);
// Start the connection
$.connection.hub.start(function() { vm.init(); });
});
</script>
<h1>Outing Number</h1>
<div id="OutingSummary">
<div data-bind="text:OutingNumber"></div>
<div data-bind="text:OutingName"></div>
</div>
在进一步调试这似乎是在线
ID(data.ID);
OutingName(data.OutingName);
OutingNumber(data.OutingNumber);
它厕所K像我在尝试设置ID时遇到“undefined_method”异常。这对其他人有意义吗?
在敲除之前你不需要引用jQuery吗? – 2012-02-28 18:41:35
如果您将jQery模板与KnockoutJS一起使用,则只需要jQuery,否则KnockoutJS就没有依赖关系。 – 2012-02-28 18:51:10
好,但这实际上是一个局部视图,主视图包含jquery引用。我在代码片段中添加了jquery引用,以便不会引发任何错误的肯定回答......这么想。我会尽快修复这个例子。 – PlTaylor 2012-02-28 18:52:42