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 값을 가져오고 싶습니다. 그 값에 접근하는 방법?knockout js에서 observablearray의 ko.computed 메소드에 액세스하는 방법

+0

'WorkDayVM'에 푸시 된 데이터가 있습니까? 당신의 예제에서 빈'data' 객체를'WorkDayVM'에 넣으면'work_time' 계산 결과가 undefined가됩니다. – rwisch45

답변

0

이미 work_time 값에 올바르게 액세스하고 있습니다.

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

문제는 WorkDayVM 객체입니다. 데이터를 저장하지 않습니다. 계산 된 관측 가능 값은 값으로 채워지는 관측 가능 값의 수에 따라 달라지며 그렇지 않은 경우에는 (정의되지 않음)을 반환합니다. 들어오는 매개 변수 datanew_date을 사용하는 코드에는 아무 것도 없습니다. 따라서 계산 된 의존성 관측 값은 채워지지 않습니다.

Observable in_time1, in_time2, out_time1 및 out_time2를 채우기 위해 WorkDayVM 생성자로 들어오는 매개 변수를 실제로 사용하면 콘솔이 정의되지 않은 것 이외의 다른 것을 기록하고 실제로 작동하는 것을 볼 수 있습니다.

두 경우 모두, null 경우에만 의미있는 결과를 반환하기 위해 계산 된 관찰 가능 반환 명령문을 변경합니다. 당신이 나에게 묻는다면, 계산 된 관찰에서 아무것도 반환하지 않는 것은 나쁜 습관입니다.