-1

JSON 経由で返されたデータに対して計算列を作成しようとしています。私はそれを働かせることができません。値を取得するかNAN、列が存在しないと表示されます。

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

1 に答える 1

0

Rate と Modifier はオブザーバブル (宣言を提供していない) であると想定しているため、 this.Rate() および this.Modififer() 表記を使用する必要があります。これらは関数であり、プロパティではありません。

于 2012-04-27T14:11:42.833 に答える