Mam następujący kod i wygląda na to, że nie dzwoni do klienta i nie aktualizuje KnokOutJS viewmodel z tymi informacjami. Funkcja GetOuting() zostaje wywołana podczas ładowania strony, a poprawne informacje są podawane do viewmodel. Chrome nie pokazuje błędów JS w narzędziach programistycznych. Od tego momentu mam problem z ustaleniem, jak go rozwiązać. Każda pomoc jest doceniana. SignalR HubPróba implementacji SignalR z Knockout 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);
}
}
ViewModel
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>
Po dalszym debugowanie wydaje się być w liniach
ID(data.ID);
OutingName(data.OutingName);
OutingNumber(data.OutingNumber);
It loo tak jakbym otrzymywał wyjątek "undefined_method", gdy próbuje ustawić ID. Czy to ma sens dla kogokolwiek innego?
Nie powinieneś odwoływać się do jQuery przed nokautem? –
Potrzebujesz tylko jQuery, jeśli używasz szablonów jQery z KnockoutJS, inaczej KnockoutJS nie ma zależności. –
Dobre przechwytywanie, ale w rzeczywistości jest to widok częściowy, a widok główny zawiera odwołanie do jquery. Dodałem odwołanie do jquery w fragmencie kodu, aby nie wzbudzić fałszywych pozytywnych answeerów ... tak bardzo dla tej myśli. Niedługo naprawię ten przykład. – PlTaylor