2012-04-27 4 views
-1

JSON을 통해 반환 된 데이터에 대해 계산 열을 만들려고합니다. 나는 그것을 작동시킬 수 없다. NAN 값을 얻거나 열이 존재하지 않는다고 말합니다.JSON에서 계산 된 열 사용

자바 스크립트 : 나는 수정 또는 속도를 변경 한 후에는 CommissionAmount를 다시 계산하는

function commissionsViewModel() { 
    var self = this; 

    self.commissions = ko.observableArray(); 
    ko.applyBindings(self, $("#commissions").get(0)); 

    function LoadcommissionsFromServer() { 
     $.post(
      '/commissions/data', 
      function (data) { 
       var results = ko.observableArray(); 
       ko.mapping.fromJS(data, {}, results); 
       for (var i = 0; i < results().length; i++) { 
        self.commissions.push(results()[i]); 
       }; 
      }, 
      'json' 
     ) 
    } 

    LoadcommissionsFromServer(); 

    self.ComissionAmount = ko.computed(
     function() { 
      return this.CommissionableAmount * this.Rate * this.Modifier; 
     }); 
    return self; 
} 

var viewModel = commissionsViewModel(); 

무엇을 달성하려고하는 것입니다. 내가 수동으로 필드를 매핑하는 경우

편집

나는 속도 및 수정이 관찰 가능한 (당신은 자신의 선언을 제공하지 않았다)이다 가정합니다 NaN

function Commission(data) { 
    this.Status = ko.observable(data.Status); 
    this.OriginalCommissionCode = ko.observable(data.OriginalCommissionCode); 
    this.NewCommissionCode = ko.observable(data.NewCommissionCode); 
    this.InvoiceNumber = ko.observable(data.InvoiceNumber); 
    this.CustomerID = ko.observable(data.CustomerID); 
    this.CommissionableAmount = ko.observable(data.CommissionableAmount); 
    this.Modifier = ko.observable(data.Modifier); 
    this.Rate = ko.observable(data.Rate); 
    this.SalesAmount = ko.observable(data.SalesAmount); 
    this.NonSalesAmount = ko.observable(data.NonSalesAmount); 
    this.CommissionAmount = ko.computed(function() { 
     return this.CommissionableAmount * this.Rate * this.Modifier; 
    }); 
} 
function commissionsViewModel() { 
    var self = this; 

    self.commissions = ko.observableArray(); 
    $.post(
     '/commissions/data', 
     function (allData) { 
      var mappedTasks = $.map(allData, function (item) { return new Commission(item) }); 
      self.commissions(mappedTasks); 
     }, 
     'json' 
    ); 
} 
ko.applyBindings(new commissionsViewModel()); 
+0

[Stack Overflow가 모든 것을 읽지 않을 것입니다] (http://meta.stackexchange.com/a/129787/172496) –

+0

HTML을 제거하기 위해 게시물을 편집했습니다. 정말, 왜 ko.computed가 작동하지 않는지 알아 내야합니다. – Travis

답변

0

을 얻을 그래서 당신은을 사용할 필요가 이 .Rate()와 this.Modififer() 표기법. 함수가 아니라 속성입니다.

+0

Rate 및 Modifier는 JSON에서 반환되는 관찰 가능 항목이지만 초기 값을 설정 한 후에 수정자를 변경할 수 있습니다. ko.mapping을 사용하여 JSON의 필드를 매핑합니다. – Travis

+0

또한 내가 그렇게 할 때 그 기능이 없다는 오류가 발생합니다. – Travis