我有以下Javascript和Html代碼,在MVC4應用程序中正常工作。
@model string
<script src="@this.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 src="@this.Url.Content("~/Scripts/knockout.mapping-latest.js")" type="text/javascript"> </script>
<script type="text/javascript" src="/signalr/hubs"> </script>
<script type="text/javascript">
$(function() {
function outingDataViewModel() {
var self = this;
self.hub = $.connection.outings;
self.ID = ko.observable();
self.OutingNumber = ko.observable();
self.OutingName = ko.observable();
//Initializes the view model
self.init = function() {
self.hub.getOuting('@this.Model');
};
self.hub.updateOuting = function (data) {
self.ID(data.ID);
self.OutingName(data.OutingName);
self.OutingNumber(data.OutingNumber);
};
self.updateOuting = function() {
var outing = { "ID": self.ID(), "OutingNumber": self.OutingNumber(), "OutingName": self.OutingName() };
self.hub.saveOuting(outing);
};
}
var vm = new outingDataViewModel();
ko.applyBindings(vm);
// Start the connection
$.connection.hub.start(function() { vm.init(); });
$('.data').change(function() { vm.updateOuting();});
});
</script>
<div id="OutingSummary">
<div data-bind="text:OutingNumber"></div>
<input data-bind="value:OutingName" class="data"/>
</div>
但是當我嘗試做以下我的$來實現映射改變(函數(){vm.updateOuting();})( '數據')。永遠不會被召喚。 Chrome開發人員工具似乎沒有發現任何錯誤,而且我很茫然。信息被綁定到html上,就在我從文本框中跳出時什麼也沒有觸發。 (與以前相同的腳本參考)
$(function() {
function outingDataViewModel() {
var self = this;
self.hub = $.connection.outings;
self.Outing = ko.observable();
//Initializes the view model
self.init = function() {
self.hub.getOuting('@this.Model');
};
self.hub.updateOuting = function (data) {
self.Outing(ko.mapping.fromJS(data));
};
self.updateOuting = function() {
var outing = { "ID": self.Outing.ID(), "OutingNumber": self.Outing.OutingNumber(), "OutingName": self.Outing.OutingName() };
self.hub.saveOuting(outing);
};
}
var vm = new outingDataViewModel();
ko.applyBindings(vm);
// Start the connection
$.connection.hub.start(function() { vm.init(); });
$('.data').change(function() { vm.updateOuting();});
});
</script>
<div data-bind="with:Outing" id="OutingSummary">
<div data-bind="text:OutingNumber"></div>
<input data-bind="value:OutingName" class="data"/>
</div>
您將可觀察絕對正確的....我用jQuery做的原因是,將要幾十多個文本框,這將導致保存在最終產品中。給他們所有的一類「數據」更容易,並且將它們全部綁定在一起。 – PlTaylor 2012-03-01 18:13:27
啊我明白所以你想通過使用一個Jquery選擇器來避免大量的訂閱。 – madcapnmckay 2012-03-01 20:18:17
對於self.hub.updateOuting,您需要$('data')調用才能正常工作。 – PlTaylor 2012-03-02 20:57:26