在我们开始之前,我想指出,这是使用html/js和knockout的第零天,所以我可能会误解它是如何一起工作的。我的绑定有什么问题?
我做了一个简单的测试webapi,所以我可以与knockout握手。这一切都工作到目前为止,但我似乎无法工作的绑定<span data-bind="text:currentMember().name"></span>
。
页
<!DOCTYPE html>
<html>
<head>
<title>Test page</title>
<script src="Scripts/knockout-2.2.1.js"></script>
<script src="Scripts/jquery-2.0.0.js"></script>
<script src="Scripts/ViewModels/indexViewModel.js" defer="defer"></script>
</head>
<body>
<div id="Content">
<section>
<p>Member Number: </p> <input id="memberNumber" type="text" />
<p>Pin: </p> <input id="memberPin" type="text" />
<input type="submit" value="Get" data-bind="click: getMember" />
</section>
<span data-bind="text:currentMember().name"></span>
</div>
</body>
</html>
视图模型
function IndexViewModel() {
var self = this;
self.currentMember = ko.observable();
self.getMember = function() {
var memberNumber = $('#memberId').val();
var memberPin = $('#memberPin').val();
if (memberNumber == '' || memberPin == '') {
memberNumber = '372-001100-134';
memberPin = '123456';
}
$.ajax({
dataType: "json",
url: "http://localhost:25979/api/members/GetMemberByNumberAndPin",
data: {
memberNumber: memberNumber,
pin: memberPin
},
success: function (serviceResponse) {
if (!serviceResponse.hasAlerts) {
self.currentMember(serviceResponse.body);
alert(self.currentMember().name);
}
}
});
};
}
ko.applyBindings(new IndexViewModel());
编辑:我已经改变了代码,现在警报确实工作,但HTML结合仍然没有更新。
self.currentMember(serviceResponse.body); – Roar 2013-04-29 13:02:59
其他 'self.currentMember(serviceResponse.body);'您可以使用[value binding](http://knockoutjs.com/documentation/value-binding.html)作为输入memberNumber,memberNumber来简化您的getMember函数。 – nemesv 2013-04-29 13:07:47