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值。如何访问该值?
答案 0 :(得分:0)
您已经正确访问了work_time值。
console.log(self.work_days()[0].work_time()); // prints undefined
问题在于您的WorkDayVM对象。它不存储任何数据。您计算的observable取决于多个可观察值被填充值,如果不是,则返回(未定义)。您的代码中没有任何内容使用传入的参数data
和new_date
,因此您的计算依赖的可观察对象永远不会被填充。
如果您实际使用进入WorkDayVM构造函数的参数来填充ob_time1,in_time2,out_time1和out_time2中的observable,您将看到您的控制台记录的内容不是未定义的,并且实际上正在工作。
在任何一种情况下,我都会更改计算的observable中的return语句,以返回有意义的内容(如果只有null
)。如果你问我,那么从计算的观察中返回任何东西都是不好的做法。