Jquery 在计算同一表格中的另一列时,使用一列的总和进行剔除

Jquery 在计算同一表格中的另一列时,使用一列的总和进行剔除,jquery,knockout.js,Jquery,Knockout.js,我期待着做以下事情。我想在第2列的计算函数中使用第1列的总计。使用knockout和jquery有没有一种简单的方法 col1 | col2 --------------------------- 1 | .21 * col1_total 10 | .25 * col1_total 20 | .31 * col1_total ---------------------------- col1_total| col2_total 为更好的示例

我期待着做以下事情。我想在第2列的计算函数中使用第1列的总计。使用knockout和jquery有没有一种简单的方法

col1      | col2
---------------------------
1         | .21 * col1_total
10        | .25 * col1_total
20        | .31 * col1_total
----------------------------
col1_total| col2_total
为更好的示例添加了代码。问题在于自我。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)
                    });
}

这就是你要找的吗?我不知道你想怎么计算第2列乘以的百分比。看看这把小提琴

}


我根据你的要求做了一把小提琴,快去看看


.

你看了ko吗?()要在函数(数据)(映射部分)中使用ko.computed,您不能访问从viewmodel部分获取总数的ko.computed函数。因此,在使用该方法生成行之前,不会计算总数。我的解决方法是调用同一数组两次,一次得到总数。然后将其指定给标签,然后在数据映射部分引用该标签。虽然它很笨重,而且似乎并不总是有效。如果我读对了,那就不是我的意思。col1和col2都有值。col2的值是col1*的总和,它是数据集中唯一的值。在你的例子中,你只是将它乘以.21,而不是col1的总和,我认为这是可行的。程序的结构有点不同。让我看看我是否能应用它。当前结构函数(data){var self=this;self.col1=ko.observable(data.col1);}函数viewmodel(){self.a1=ko.observableAry([]);函数total cols函数以获取数据}看起来我需要从函数(data)中提取我的.computed并将其全部放在视图模型中……添加了代码以澄清。这把小提琴与我的程序设置方式不符。不知道如何修改它才能工作。
<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());