0
self.work_days = ko.observableArray();

self.work_days().push(new WorkDayVM({}, new_date))//new_date is the date supplied from the form 

function WorkDayVM(data, day) {
   var self = this;
   self.in_time1 = ko.observable();
   self.out_time1 = ko.observable();
   self.in_time2 = ko.observable();
   self.out_time2 = ko.observable();
   self.work_time = ko.computed(function () {
     var in_time1_raw = self.in_time1();
     var out_time1_raw = self.out_time1();
     var in_time2_raw = self.in_time2();
     var out_time2_raw = self.out_time2();

     if(!in_time1_raw || !out_time1_raw || !in_time2_raw || !out_time2_raw)
                return;
     var t1 = get_minutes(in_time1_raw);
     var t2 = get_minutes(out_time1_raw);
     var t3 = get_minutes(in_time2_raw);
     var t4 = get_minutes(out_time2_raw);
     res = t2 - t1 + t4 - t3;
     return get_hr_m(res);//returns hr:min
  }, this);
}
console.log(self.work_days()[0].work_time); //prints dependentobservable()
console.log(self.work_days()[0].work_time());//prints undefined

work_time 値を取得したい。その値にアクセスする方法は?

4

1 に答える 1

0

すでに work_time 値に正しくアクセスしています。

console.log(self.work_days()[0].work_time()); // prints undefined

問題は WorkDayVM オブジェクトにあります。データを保存していません。計算されたオブザーバブルは、値が入力されているオブザーバブルの数に依存し、そうでない場合は (未定義) を返します。data入力パラメータおよびを使用するコードには何もないnew_dateため、計算が依存するオブザーバブルは決して埋められません。

WorkDayVM コンストラクターに渡されるパラメーターを実際に使用して、オブザーバブル in_time1、in_time2、out_time1、および out_time2 を埋めると、コンソールが未定義以外の何かをログに記録し、実際に機能していることがわかります。

どちらの場合でも、計算されたオブザーバブルの return-statement を変更して、意味のあるものを返すようにしますnull。あなたが私に尋ねると、計算されたオブザーバブルから何も返さないことは、一種の悪い習慣です。

于 2014-02-10T09:57:44.947 に答える