2012-04-27 38 views
-1

我试图对通过JSON返回的数据进行计算列。我无法让它工作。我要么获得NAN的值,要么它说该列不存在。与JSON一起使用计算列

的javascript:

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(); 

我试图做到的是为它重新计算CommissionAmount后,我更改修改或速率。

编辑

如果我手动字段映射我得到了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) – 2012-04-27 13:24:01

+0

我编辑帖子以删除HTML。真的,我只需要弄清楚为什么ko.computed不起作用。 – Travis 2012-04-27 13:35:00

回答

0

我假设利率和修改是观测(你没有提供他们的声明),所以你需要使用this.Rate()和this.Modififer()符号。它们是功能,而不是属性。

+0

Rate和Modifier是使用JSON返回的可观察对象,但可以在初始值设置后更改修饰符。我正在使用ko.mapping来映射JSON中的字段。 – Travis 2012-04-27 18:10:35

+0

另外,当我这样做时,出现这些函数不存在的错误。 – Travis 2012-04-27 19:26:57