0

我正在寻找执行以下操作。我想在第 2 列的计算函数中使用第 1 列的总数。有没有一种简单的方法可以用敲除和 jquery 做到这一点?

col1      | col2
---------------------------
1         | .21 * col1_total
10        | .25 * col1_total
20        | .31 * col1_total
----------------------------
col1_total| col2_total

添加代码以获得更好的示例。问题在于self.col3。self.col1total 在该部分代码中不可用。我怎样才能解决这个问题?

function custdata(data) {
var self = this;
self.col1= ko.observable(data.col1);
self.col2= ko.observable(data.col2);

self.col3= ko.computed(function(){
 return self.col1() * self.col1total();
});
}


function guideviewmodel() {
var self = this;
self.custlist = ko.observableArray([]);

        self.col1total = ko.computed(function () {
            var total = 0;
            $.each(self.custlist(), function () { total += this.col1(); });
            return total;
        });

        self.custlist.removeAll();
                    $.getJSON(callPath + "/api/xxx?guid=" + $("#lblFilteredID").text(), function (allData) {
                        var mappedLogs = $.map(allData, function (item) { return new custdata(item) });
                        self.custlist(mappedLogs)
                    });
}
4

2 回答 2

2

我根据您的要求创建了一个小提琴,请查看,

工作小提琴

于 2013-03-29T18:49:44.193 回答
0

这是你想要的?我不确定您要如何计算将第 2 列乘以的百分比。看看这个小提琴http://jsfiddle.net/G7dye/

<div>
<span data-bind="text:$root.columns().length"></span>
<table>
    <thead>
        <th>Col1</th>
        <th>Col2</th>
    </thead>
    <tbody data-bind="foreach:columns">
        <tr>
            <td><span data-bind ='text:num'></span></td>
            <td><span data-bind="text:col2"></span></td>
        </tr>
    </tbody>
</table>

var TableItem = function(c){
var self = this;
 this.num = ko.observable(c);
this.col2 = ko.computed(function(){
    return (self.num() * .21);
});
}

var ViewModel = function(){
var self = this;
this.columns = ko.observableArray([new TableItem(5),new TableItem(3)]);
this.columnOneTotal = ko.computed(function(){
    var colOneTot = 0;
    ko.utils.arrayForEach(self.columns(), function(column) {
        colOneTot += column.num();
    });
    return colOneTot;
});
 this.columnTwoTotal = ko.computed(function(){
    var colTwoTot = 0;
    ko.utils.arrayForEach(self.columns(), function(column) {
        colTwoTot += column.col2();
    });
    return colTwoTot;
});

}

ko.applyBindings(new ViewModel());
于 2013-03-29T18:35:38.980 回答