Я пытаюсь реализовать Knockout Validation и Knockout Mapping. У меня есть ASP.Net MVC WebAPI, который отправляет данные JSON моему клиенту, где я сопоставляю JSON с наблюдаемыми в моей модели:
Модель представления:
ko.validation.rules.pattern.message = 'Invalid.';
ko.validation.configure({
registerExtenders: true,
messagesOnModified: true,
insertMessages: true,
parseInputAttributes: true,
messageTemplate: null,
decorateElement: true,
errorClass: 'error'
});
var MakePaymentViewModel = function ()
{
var mapDataFromJson = function (jsonFromServer)
{
var model = ko.mapping.fromJS(jsonFromServer);
self.PaymentAmount(model.PaymentAmount());
self.MakePaymentTo(model.MakePaymentTo());
self.MakePaymentOn(model.MakePaymentOn());
};
var self = this;
/* MAKE PAYMENT MODEL*/
self.PaymentAmount = ko.observable().extend({ required: { message: 'required'}});
self.MakePaymentTo = ko.observable().extend({ required: { message: 'required'}});
self.MakePaymentOn = ko.observable().extend({ required: { message: 'required' }});
self.Errors = ko.validation.group(self);
self.MapDataFromServer = function (jsonFromServer)
{
mapDataFromJson(jsonFromServer);
};
self.DoPaymentConfirmation = function ()
{
console.log('error count: ' + self.Errors().length);
};
};
Вот мое мнение:
<form id="MakePaymentForm" autocomplete="off">
<div class="input-wrapper">
<label for="SendingAmount" class="text-left">I am sending <small>*</small></label>
<input id="PaymentAmount" type="text" data-bind="value: PaymentAmount"/>
</div>
<div class="input-wrapper">
<label for="MakePaymentTo" class="text-left">to <small>*</small></label>
<input id="MakePaymentTo" type="text" data-bind="value: MakePaymentTo"/>
</div>
<div class="input-wrapper">
<label for="MakePaymentOn" class="text-left">on <small>*</small></label>
<input name="MakePaymentOn" id="MakePaymentOn" type="text" data-bind="value: MakePaymentOn"/>
</div>
<button type="submit" class="small radius" data-bind="click: DoPaymentConfirmation">Send</button>
</form>
Я думаю, что происходит, когда я впервые получаю данные с сервера, данные JSON равны нулю:
{"PaymentAmount":null,"MakePaymentTo":null,"MakePaymentOn":null}
Таким образом, функция mapDataFromJson заполняет наблюдаемые данные нулевыми данными и запускает правила проверки, и, следовательно, пользовательский интерфейс отображает сообщения об ошибках непосредственно перед тем, как пользователь сможет ввести какие-либо данные.
Есть какие нибудь идеи как это починить? Я новичок в Knockout, поэтому, возможно, я делаю это неправильно. Спасибо за ваше время.
mapDataFromJson
? - person Jamie Dixon   schedule 15.11.2013