Tôi có mã sau và có vẻ như không gọi điện cho khách hàng và cập nhật chế độ xem KnockOutJS với thông tin. GetOuting() được gọi khi tải trang và thông tin chính xác được đưa vào viewmodel. Chrome không hiển thị lỗi JS trong công cụ dành cho nhà phát triển. Từ thời điểm đó, tôi gặp khó khăn trong việc tìm ra cách khắc phục sự cố. Bất kỳ trợ giúp được đánh giá cao. SignalR HubCố gắng gợi ý SignalR với 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>
Khi gỡ rối hơn nữa nó dường như là trong các dòng
ID(data.ID);
OutingName(data.OutingName);
OutingNumber(data.OutingNumber);
Nó loo ks như tôi đang nhận được một ngoại lệ của "undefined_method" khi nó cố gắng để thiết lập ID. Điều đó có hợp lý với bất kỳ ai khác không?
Bạn không cần phải tham khảo jQuery trước khi loại trực tiếp? –
Bạn chỉ cần jQuery nếu bạn đang sử dụng các mẫu jQery với KnockoutJS, nếu không KnockoutJS không có phụ thuộc. –
Bắt tốt, nhưng đây thực sự là một phần xem và chế độ xem chính chứa tham chiếu jquery. Tôi đã thêm tham chiếu jquery vào đoạn mã để không đưa ra bất kỳ câu trả lời sai tích cực nào ... rất nhiều cho suy nghĩ đó. Tôi sẽ sớm khắc phục ví dụ. – PlTaylor