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 对象中。它不存储任何数据。您计算出的 observable 取决于许多用值填充的 observable,如果不是,则返回(未定义)。您的代码中没有任何内容使用传入参数dataand new_date,因此您计算所依赖的 observables 永远不会被填充。

如果您实际上使用进入 WorkDayVM 构造函数的参数来填充可观察的 in_time1、in_time2、out_time1 和 out_time2,您将看到控制台记录了未定义之外的其他内容,并且实际上正在工作。

在任何一种情况下,我都会更改计算出的 observable 中的 return 语句以返回有意义的东西,如果只有null. 如果你问我,从计算的 observable 中不返回任何内容是一种不好的做法。

于 2014-02-10T09:57:44.947 回答