2012-12-10 2 views
0

У меня есть объект нокаута, который содержит одно свойство, называемое , созданное. Это свойство времени Дата содержит дату события. Затем в моей форме html у меня есть два входа selectbox: первый - для часов, а второй - для минут. Они позволяют пользователю выбирать время, затем выбранные значения должны быть установлены в созданном свойстве. Ниже приведен пример коды моей формы:Связать два значения selectboxes с одним значением даты нокаута

<form action="..." method="..."> 
    <select name="hours"> 
     <option value="8">8</option> 
     <option value="9">9</option> 
     ... 
     <option value="22">22</option> 
    </select> 
    <select name="minutes"> 
     <option value="0">0</option> 
     ... 
     <option value="30">30</option> 
    </select> 

    ... 
</form> 

Это очень простая форма, но я не понимаю, как я мог связать, что вклад в созданной стоимость и обновить только часть даты, которая принадлежит для каждого входа. В принципе, когда я выбираю вариант первого ввода, я должен обновлять часы даты, и когда я выбираю вариант второго ввода, минуты даты должны быть обновлены.

ответ

3

Я бы сделал это, добавив в смесь computed observable и сохраните выбранные минуты и час в своих составных частях.

Вот немного надуманный пример, но показывает общий принцип. Вычисленное здесь просто конкатенации час AN минуту части вместе, но предположительно вы бы создать экземпляр объекта Date вместо того, чтобы делать то, что вам нужно сделать:

function TimeModel(options) { 
    var self = this; 

    self.hourOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 
    self.minuteOptions = [0, 15, 30, 45]; 

    self.selectedHour = ko.observable(options.hour || 0); 
    self.selectedMinute = ko.observable(options.minute || 0); 

    self.selectedDate = ko.computed(function() { 
     return self.selectedHour() + ":" + self.selectedMinute(); 
    }); 
} 

Я бы тогда связать hourOptions и minuteOptions к соответствующему выбрать коробки и все должно быть хорошо :)

Проверить эту скрипку для рабочего раствора: http://jsfiddle.net/WickyNilliams/ejjHp/

+0

Мне нравится ваше решение, но, как написано в этом вопросе у меня есть свойство настроек уже который хранит дату и я должен установить часы/минут на Это. Хотя я мог каким-то образом наблюдать за привязкой к методам setter объекта Date. Поэтому я должен установить значение selectboxes на значение времени, а затем отразить любое изменение этого свойства. – Stefano

+0

Если вы могли бы написать jsfiddle, вы, скорее всего, получите точные ответы, так как людям не нужно требовать дистилляции от простого текст, там их можно увидеть. EDIT: также, я думаю, вы должны просто расширить описанный выше подход, хранить каждую часть даты индивидуально и использовать вычисляемый для расчета новой даты каждый раз, когда изменяется одна ее часть (нет реальной разницы в вызове 'setMinutes' и т. д. вместо того, чтобы каждый раз вводить 'Date') – WickyNilliams

+0

Это почти идентично коду в одном из моих приложений (включая 0, 15, 30, 45). Когда selectedDate запускается, обновите фактическое поле «Дата», которое вы хотите отправить обратно на сервер. –

Смежные вопросы