2013-09-30 176 views
0

我有一個顯示日期的日期字段:更新字段一旦計算字段計算

<input type="text" data-bind='value: model.BeginDateTime'> 

我然後具有從一個月的開始時顯示小時字段:

<input type="text" data-bind='value: model.BeginHour()'> 

它從計算函數獲得的值

self.model.BeginHour = ko.computed(function(){ 

     var dateToConvert = new Date(self.model.BeginDateTime()); 
     var zeroDate = new Date(dateToConvert.getFullYear(), dateToConvert.getMonth(), 01, 0, 0, 0, 0); 
     var millisecondsDifference = (dateToConvert - zeroDate); 
     var hoursDifference = (millisecondsDifference/((1000 * 60) * 60)); 
     return Math.round(hoursDifference); 


}); 

但我需要能夠更新日期,如果小時值更改。

例如,如果日期爲2012年2月1日8:00:00 PM,則BeginHour值爲20.現在我希望能夠將BeginHour的值從20更改爲21,並且它應該更新模型.BeginDateTime至2/1/2012 9:00:00 PM。 該爭議目前運行良好,以顯示小時,但我無法得到它的工作時,我更新小時字段。 謝謝

+0

但是,這將創建一個循環依賴...你需要重新思考你在這裏嘗試做什麼。 –

回答

0

之前計算過的稱爲dependentObservable,它可以幫助你理解你哪裏出錯了。

如果您有一個計算引用model.BeginDateTime,這意味着計算取決於model.BeginDateTime的值。只要您更改model.BeginDateTime的值,它就會發生變異。

現在,您似乎想要另一種方式,這意味着您希望model.BeginDateTime成爲計算的引用模型.BeginHour。

您還可以訂閱更改ko中的屬性事件。例如

self.model.BeginHour.subscribe(function(newValue){ 
    console.log("I get called when BeginHour value changes to " + newValue); 
});