2015-08-23 2 views
1

Я изучал различные методы использования проверки нокаута для сравнения дат. Я не могу заставить его работать с моими объективами в объекте validatedObservable.Нокаут-валидация - дата больше, чем другая дата

Мне нужно, чтобы validatedObservable проверял, прошла ли проверка нажатой кнопки нажатием кнопки - это моя группировка элементов управления.

Вот мой демо:

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script src="~/Scripts/knockout-2.3.0.js"></script> 
<script src="~/Scripts/knockout.validation.min.js"></script> 
<script src="~/Scripts/moment.min.js"></script> 
<form> 
    <table> 
     <tr> 
      <td>Name:</td> 
      <td><input type="text" data-bind="value:contactForm().name" value="" /></td> 
     </tr> 
     <tr> 
      <td>From:</td> 
      <td><input type="text" data-bind="value:contactForm().fromDate" value="" /></td> 
     </tr> 
     <tr> 
      <td>To:</td> 
      <td><input type="text" data-bind="value:contactForm().toDate" /></td> 
     </tr> 
    </table> 
    <button type="button" data-bind='click: submit'>Submit</button> 
</form> 
<script> 

    ko.validation.init({ 
     messagesOnModified: false, 
     parseInputAttributes: true, 
     grouping: { 
      deep: true 
     } 
    }); 

    var myViewModel = function() { 
     var self = this; 
     self.contactForm = ko.validatedObservable({ 
       name :ko.observable().extend({ required: true }), 
       fromDate :ko.observable('2014-11-10').extend({ date: true }), 
       toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate }) 
      }); 
      submit = function() { 
       console.log(this.contactForm.isValid()) 
      }; 
     }; 

     ko.applyBindings(new myViewModel()); 

</script> 

Я в принципе не могу получить работу этой линии:

toDate: ko.observable('2014-11-10').extend({date: true, min: this.fromDate }) 

кого-либо идеи?

ответ

1

Это потому, что вы используете this в литерал объекта создания (если вы обратитесь к fromDate в toDate declration), а также при строительстве этого объекта, this еще со ссылкой на контекст функции инкапсулирующая (myViewModel в данном случае).

Попробуйте вместо этого (на основе this answer):

self.contactForm = ko.validatedObservable({ 
      name: ko.observable().extend({ required: true }), 
      fromDate: ko.observable('2014-11-10').extend({ date: true }), 
      toDate: ko.observable('2014-11-10'), 
      init: function() { 
       this.toDate = this.toDate.extend({date: true, min: this.fromDate}); 
       return this; 
      } 
     }.init()); 
+0

Спасибо за это, была у него в течение нескольких часов – Frames84