2014-03-26 2 views
0

몇 가지 조언을 찾고 있습니다.선택한 테이블 값 (녹아웃, 자바 스크립트) 계산

나는 녹아웃으로 역동적 인 테이블을 만들려고합니다. (훌륭합니다. 그러나 나는 그것의 첫 단계에 불과합니다). 이 테이블은 작동하지만 몇 가지 문제가 계속 발생합니다. 1 (업데이트 : 삭제됨) 2. self.ave는 선택된 위험의 계산 된 평균 가중치가 아니라 NaN을 반환합니다.

self.ave = ko.computed(function() { 
    var total = 0; 
    for (var i = 0; i < self.risks().length; i++) { 
     total += self.risks()[i].weight; 
    } 
    return total/self.risks().length; 
}); 

업데이트 : 내가 새로운 위험을 추가 할 때마다, 그것의 무게는 또한 모든 위험의 합이 1 (디폴트 위험의 무게) 새로운 중 어느 + 0 (무게로 계산됩니다 0 인 것으로 보인다 위험) + 0 + N ...

갱신 2는 : 아직 어떤 도움 http://jsfiddle.net/Skaidrius/52xdL/

+0

보기 바인딩

self.ave = ko.computed(function() { var total = 0; for (var i = 0; i < self.risks().length; i++) { total += self.risks()[i].weight(); } return total/self.risks().length || 0; }); 

변화는 어떤 활동의 선택 위험의 총 평균 체중을 계산하는 방법을 찾을 수 없습니다. – Skaidrius

답변

1

약간의 실수가 찾고.

  1. 첫 번째 문제가있는 사용 가능한 디스크는 일반적인 것이 아니며 Activity와 연결되어야합니다.

    var Activity = function (title) { 
    var self = this; 
    self.title = ko.observable(title); 
    self.availableRisks = ko.observableArray([{ 
        name: "Low", 
        weight: 1 
    }, { 
        name: "Medium", 
        weight: 2 
    }, { 
        name: "High", 
        weight: 3 
    }]); 
    }; 
    

2- self.risks() [I] .weight 관측 그래서 괄호 액세스. 아직 availableRisks

<!-- ko foreach:risks --> 
     <td> 
      <select class="form-control input-sm" data-bind="options: $parent.availableRisks, value: risks.weight, optionsText: 'name'"></select> 
     </td> 
     <!-- /ko --> 

Fiddle Demo

+0

정말 고마워요. self.ave는 여전히 평균 체중을 계산하지 않지만 이전보다 훨씬 나아졌습니다. 또한 risk 클래스가 아닌 Activity에 availableRisk를 추가해야하는 이유를 설명해주십시오. – Skaidrius

+1

availablerisk는 각 행마다 고유하므로 공유되는 경우 동일한 값을 갖게됩니다. 당신은 self.risks를 availableRisk 대신 Activity에 가질 수있는 또 다른 방법이 있습니다. 둘 다 작동 할거야. – Akhlesh