2015-02-18 4 views
0

Я использую нокаут и машинописный текст в моем проекте, и мне нужно построить в модели представления три поля, которые будут иметь тип datetime. Они должны быть обновлены, когда условие встретится.Нокаут, наблюдаемый и время

Что у меня есть:

Вид:

<div data-bind="if: step1CompleteY"> 
    <span data-bind="text: step1CompleteY" /> 
    <input type="datetime" data-bind="value: timestampSt1()" /> 
</div> 
<div data-bind="if: step12Complete"> 
    <span data-bind="text: step12Complete" /> 
    <input type="datetime" data-bind="value: timestampSt2()" /> 
</div> 
<div data-bind="if: step23Complete"> 
    <span data-bind="text: step23Complete" /> 
    <input type="datetime" data-bind="value: timestampSt3()" /> 
</div> 

вид Модель:

myTimestamp = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes());  
timestampSt1 = ko.observable(this.myTimestamp); 
timestampSt2 = ko.observable(this.myTimestamp); 
timestampSt3 = ko.observable(this.myTimestamp); 
step1CompleteY = ko.computed({ 
    read:() => this.objectChecks.exportValue() === 'Yes' 
}) 
step12Complete = ko.computed({ 
    read:() => { return this.objectChecks.exportValue() === 'No' || this.objectChecks.rfqStatusValue() === 'Approved' } 
}) 
step23Complete = ko.computed({ 
    read:() => { return (this.objectChecks.indemnityValue() === 'Yes' || this.objectChecks.indemnityValue() === 'N/A' || this.objectChecks.rfqStatusValue() === "Denied") } 
}) 

Проблема здесь в том, что время, дата появляются, и я не знаю, как использовать «setTimeout» работать с этими наблюдаемыми и в основном обновлять это время только тогда, когда условия встречаются.

Любые идеи?

ответ

0

Bind ваших ценностей следующим способом. Если между 3 штампами времени нет никакой связи. Я буду объявлять разные марки времени, чтобы избежать путаницы.

myTimestamp1 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 

myTimestamp2 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 

myTimestamp3 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 

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

step1CompleteY = ko.computed({ 
    read:() => this.objectChecks.exportValue() === 'Yes'; 

    myTimestamp1 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 
}) 

step12Complete = ko.computed({ 
    read:() => { return this.objectChecks.exportValue() === 'No' || this.objectChecks.rfqStatusValue() === 'Approved' } 

myTimestamp2 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 
    }) 

step23Complete = ko.computed({ 
    read:() => { return (this.objectChecks.indemnityValue() === 'Yes' || this.objectChecks.indemnityValue() === 'N/A' || this.objectChecks.rfqStatusValue() === "Denied") } 



myTimestamp3 = ko.observable(new Date().getDate() + "/" + new Date().getMonth() + "/" + new Date().getFullYear() + " " + new Date().getHours() + ":" + new Date().getMinutes()); 
    }) 

Здесь, если значения каждого временного штампа будут отражены. И проблема с обновлением будет решена.

timestampSt1 = ko.observable(myTimestamp1); 
timestampSt2 = ko.observable(myTimestamp2); 
timestampSt3 = ko.observable(myTimestamp3); 
0

Первое правило нокаута заключается в том, что наблюдаемые являются функциями. myTimestamp является функцией, поэтому, когда вы пишете

timestampSt1 = ko.observable(this.myTimestamp); 
timestampSt2 = ko.observable(this.myTimestamp); 
timestampSt3 = ko.observable(this.myTimestamp); 

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

Попробуйте это:

// don't call new Date several times - there is a very small chance the value will change between each call. 
var d = new Date(); 
// create a string from the date 
var timestamp = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes()); 
myTimestamp = ko.observable(timestamp); 
timestampSt1 = ko.observable(timestamp); 
timestampSt2 = ko.observable(timestamp); 
timestampSt3 = ko.observable(timestamp); 
+0

Я реализовал ваше предложение, и вы правы с помощью письма. Теперь, имея это, как сделать, чтобы иметь timestampSt1, timestampSt2 принимает разные значения в зависимости от момента, когда условие становится истинным. В настоящее время метка времени отображается со значением, когда страница обновляется. –

+0

Не делайте этого: 'data-bind =" значение: timestampSt1() "' - попробуйте это вместо: 'data-bind =" значение: timestampSt1 "' Первое не будет связывать значение правильно - оно будет читать его но не буду писать обратно – Quango

+0

Я уже пробовал это и возвращал: Неожиданный вызов метода или доступа к свойствам. –

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