计算计算字段后更新字段

时间:2013-09-30 16:13:28

标签: knockout.js

我有一个显示日期的日期字段:

<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,并且应该更新模型。 BeginDateTime至2/1/2012 9:00:00 PM。 conmputed目前正好用于显示小时但我更新小时字段时无法让它工作。 感谢

1 个答案:

答案 0 :(得分:0)

计算之前曾被称为dependentObservable,它可以帮助你理解你出错的地方。

当你有一个计算引用模型.BeginDateTime意味着computed依赖于model.BeginDateTime的值。一旦你改变了model.BeginDateTime的值,它就会变异。

现在你似乎想要反过来,这意味着你希望model.BeginDateTime是一个计算引用模型.BeginHour。

您还可以订阅更改ko中属性的事件。 e.g。

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