0

私は次のことをしようとしています。列 1 の合計を列 2 の計算関数で使用したいのですが、ノックアウトと 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 に答える