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 に変更できるようにしたいので、model.BeginDateTime を 2 に更新する必要があります。 /2012 年 1 月 9:00:00 午後。計算されたものは現在、時間を表示するためにうまく機能していますが、時間フィールドを更新すると機能しません。ありがとう

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 に答える