我有一个看起来像这样的视图模型:
im.co.userPayments.UserPaymentViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
}
来自服务器的数据是一个具有PaymentData对象列表的对象。当页面首次加载时,一切都很好。页面上对PaymentData的所有绑定都能正常显示和运行。我遇到的问题是从服务器获取新数据后更新PaymentData observable数组。
用户可以在页面上选择不同的选项,并通过ajax调用从服务器获取一个新的PaymentData对象列表。
在ajax调用返回后,我尝试通过执行以下操作来更新observable数组:
viewModel.PaymentData(newData);
此代码在页面上使用的自定义绑定中产生错误。以下是自定义绑定的代码:
ko.bindingHandlers.paymentAmount = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
$(element).blur(function() {
// Get the value stored in the input box.
var elementVal = $(element).val();
var val = valueAccessor();
// Update the underlying view model value.
val(elementVal);
});
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var val = ko.unwrap(valueAccessor());
var displayVal;
var context = bindingContext.$data;
if (val < 0) {
// By rule, if the amount is less than zero it will
// be set to zero.
// Update the value of Total
context.Amount(0);
displayVal = "0.00";
// Set color to red to indicate to the user that the
// payment value was changed from a negative amount
// to zero.
$(element).css('color', 'red');
} else {
$(element).css('color', ''); // set to default color.
displayVal = parseFloat(Math.round(val * 100) / 100).toFixed(2);
}
$(element).val(displayVal);
}
}
就像我之前所说,当最初从服务器加载页面时,一切正常,包括自定义绑定中的代码。但是,在ajax调用后尝试使用新列表刷新数据时,我收到错误。自定义绑定中此行发生错误:
context.Amount(0);
我没有确切的错误文本,但它不是一个有效的函数。
我不明白这里发生了什么。我们将非常感谢您提供的任何见解。
谢谢!