2013-08-12 3 views
0

중첩 된 하위 목록의 값의 합을 계산하려고합니다. 쿼리 할 VM이 KO 매퍼와 매핑되고 계산 된 feild로 확장됩니다. 내가 찾고 있어요 중첩 된 배열을 찾을 수 없습니다 :Knockout 계산 된 합계 중첩 된 목록

var HouseholdViewModel = function(data) { 
    this.$type = 'HouseholdViewModel'; 
    ko.mapping.fromJS(data, mapping, this); 

    this.T12 = ko.computed(function() { 
     var total = 0; 
     ko.utils.arrayForEach(this.Accounts(), function (account) { 
      total += account.T12Revenue(); 
     }); 
     return total; 
    }, this); 

}; 

var AccountViewModel = function(data) { 
    this.$type = 'AccountViewModel'; 
    ko.mapping.fromJS(data, mapping, this); 
}; 

var mapping = { 
    'Households': { 
     create: function(options) { 
      return new HouseholdViewModel(options.data); 
     } 
    }, 
    'Accounts': { 
     create: function(options) { 
      return new AccountViewModel(options.data); 
     } 
    } 
}; 

내가 오류 메시지가 얻을 'catch되지 않은 형식 오류를 : 개체 [개체 개체]있는 방법이 없다'계정 '을'. 나는 이것이 KO.Mapper가 계정을 아직 ​​묶어 놓지 않았기 때문에 가설이지만, 매핑 호출은 계산 된 관측 가능치보다 높습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

팁 : 페이지에 '

'을 추가하고 뷰 모델을 검사하십시오. –
                        
                            
    Tomalak
                                
                            
                        
                    

답변

1

쉽게 해결할 수있는 방법은 계정을 계산에 사용하기 전에 계정을 가지고 있는지 확인하는 것입니다. 계정이 존재하는 경우이 통지됩니다 다시 계산하는 계산 - this.Accounts가 존재하지 않음을 넣다

var HouseholdViewModel = function(data) { 
    this.$type = 'HouseholdViewModel'; 
    ko.mapping.fromJS(data, mapping, this); 

    this.T12 = ko.computed(function() { 
     var total = 0; 
     if (!this.Accounts) { return 0; } 
     ko.utils.arrayForEach(this.Accounts(), function (account) { 
      total += account.T12Revenue(); 
     }); 
     return total; 
    }, this); 
}; 

는 아무것도 돌려주지 않는 거기에 if 문을 추가 (또는 당신이 원하는 무엇이든).