Knockout更新使用映射扩展创建的observableArray

时间:2015-01-27 23:34:14

标签: knockout.js

我有一个看起来像这样的视图模型:

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);

我没有确切的错误文本,但它不是一个有效的函数。

我不明白这里发生了什么。我们将非常感谢您提供的任何见解。

谢谢!

0 个答案:

没有答案