我有一个绑定到我的UI的ViewModel
<div class="editor-label-medium-bold">
<div data-bind="text: 'Cancellation Amount'"></div>
</div>
<div class="editor-field-short">
<div id="CancellationAmount" data-bind="text: CancellationAmount"></div>
</div>
当调用ko.applyBindings(xxx)时,CancellationAmount的值会显示。到目前为止一切都很好。
我有一个JQueryUI日期选择器,并且在日期更改后,我得到了取消金额的更新数字。这会得到正确的价值。
$.ajax({
dataType: "json",
method: "GET",
url: '@Url.Action(MVC.XYZ.ActionNames.GetCancellationAmount, MVC.XYZ.Name)',
data: { date: mdl.CancelDate(), policyid: '@ViewBag.PolicyID' }
})
.done(function (response) {
mdl.CancellationAmount = ko.observable(response);
$('#CancellationAmount').val(response);
})
.fail(function (response) {
alert('fail');
});
“完成”回调中的两行都没有更新UI。我用Chrome测试了这个,在控制台中,mdl.CancellationAmount()返回正确的数字,但UI不会让步。
我即将取消绑定此字段并使用JQuery手动更新它,就像我尝试“完成”回调的第二行一样。我认为因为该字段是绑定的,淘汰会阻止JQuery(可能是其他任何东西......)来更新它。
我应该提一下这行代码:
mdl.CancellationAmount = ko.observable(mdl.AnnualPremium());
在初始加载时,我的服务器模型为CancellationAmount发送null,所以我将另一个值复制到它,这是一个正十进制数字,但我打开它,所以不要认为这是问题。这一行就在ko.applyBindings(xxx)
之前有没有人见过这个,或者知道如何克服这个问题?
答案 0 :(得分:4)
您以错误的方式将数据分配给mdl.CancellationAmount
。它已经是可观察的,所以你应该使用()在done
函数中赋值。重写你的回调如下:
.done(function (response) {
mdl.CancellationAmount(response);
})