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);


});

但如果小时值发生更改,我需要能够更新日期。

例如,如果日期是 2/1/2012 8:00:00 PM,则 BeginHour 值为 20。现在我希望能够将 BeginHour 的值从 20 更改为 21,它应该将 model.BeginDateTime 更新为 2 /1/2012 晚上 9:00:00。concomputed 目前在显示小时数方面效果很好,但是当我更新小时字段时,我无法让它工作。谢谢

4

1 回答 1

0

之前计算的曾经被称为dependentObservable,它可以帮助您了解哪里出错了。

当您有一个计算的引用 model.BeginDateTime 时,这意味着计算取决于 model.BeginDateTime 的值。只要您更改 model.BeginDateTime 的值,它就会发生变化。

现在您似乎希望它反过来,这意味着您希望 model.BeginDateTime 成为计算的引用 model.BeginHour。

您还可以订阅 ko 中属性的更改事件。例如

self.model.BeginHour.subscribe(function(newValue){
    console.log("I get called when BeginHour value changes to " + newValue);
});
于 2013-09-30T16:51:22.730 回答