如何在knockout js中访问observablearray的ko.computed方法

时间:2014-02-09 05:23:17

标签: javascript knockout.js ko.observablearray computed-observable

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值。如何访问该值?

1 个答案:

答案 0 :(得分:0)

您已经正确访问了work_time值。

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

问题在于您的WorkDayVM对象。它不存储任何数据。您计算的observable取决于多个可观察值被填充值,如果不是,则返回(未定义)。您的代码中没有任何内容使用传入的参数datanew_date,因此您的计算依赖的可观察对象永远不会被填充。

如果您实际使用进入WorkDayVM构造函数的参数来填充ob_time1,in_time2,out_time1和out_time2中的observable,您将看到您的控制台记录的内容不是未定义的,并且实际上正在工作。

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