2

"Vol"의 관측 가능 항목을 포함하는 "Parts"의 관측 가능한 배열로 작업하고 있습니다. 현재 각 부분의 볼륨과 표시된 총 크기가 있습니다. 응용 프로그램이 시작되면 총 금액이 올바르게 추가됩니다. 그러나 파트의 볼륨을 변경하면 총 금액이 다시 계산되지 않습니다.계산 된 Knockoutjs가 업데이트 후 다시 계산되지 않습니다.

HTML :

<ul> 
    <li data-bind="foreach: Parts"> 
     <input data-bind="value: Vol" /> 
<br/> 
    </li> 
</ul> 

<br/> 
<br/> 
<span data-bind="text: fullVol "></span> 

자바 스크립트 : 당신은 정수로 입력을 변환하지 않습니다 value: Vol 바인딩 녹아웃을 사용하는 경우 http://jsfiddle.net/jwinstonaspen/Zmkew/6/

답변

5

그냥 저장합니다

여기
function Part (data) { 

     var self = this; 
     self.Vol= ko.observable(data.Vol); 

    } 


    function AppViewModel() { 
     var self = this; 


     self.Parts = ko.observableArray([new Part({"Vol": 1}), new Part({"Vol":2}), new Part({"Vol":3})]); 
     self.fullVol = ko.computed(function() { 
      var total = 0; 
      $.each(self.Parts(), function() { total += (this.Vol()) }) 
      return total; 
     }); 
    } 


ko.applyBindings(new AppViewModel()); 

내 JsFiddle입니다 사용자가 데이터를 문자열로 입력했습니다.

그래서 당신은 총을 계산하기 전에 정수로 구문 분석해야합니다

$.each(self.Parts(), function() { total += (parseInt(this.Vol())) }) 

는 A는 fiddle을 고정.

이제 파싱을 수행하기 때문에 사용자가 숫자가 아닌 입력을 입력하는 경우를 처리해야합니다.

그러나 쉽게 구문 분석을 추상화하는 custom binding handler을 작성할 수 있습니다.

또는 ko.extenders을 사용할 수 있습니다. 문서에는 예를 들어 here도 있습니다.