Могу ли я связать вычисляемый наблюдаемый массив (нокаут)?

У меня есть наблюдаемый массив некоторых элементов (простые пары чисел), и я хочу связать это с одной таблицей. Затем я хочу связать вычисляемую наблюдаемую, которая зацикливает первый массив и суммирует некоторые значения путем группировки. Мой цикл foreach работает нормально и суммирует числа по группам (как вы можете видеть, раскомментировав мои оповещения), но он никогда не привязывается к html. Смотри мою скрипку ниже. Куда я иду не так?

function DataPoint(group, num) {
this.group = group;
this.num = num;
}
function TestViewModel() {
var self = this;

self.data = ko.observableArray([
    new DataPoint(1, 1),
    new DataPoint(2, 5),
    new DataPoint(3, 9),
    new DataPoint(3, 10),
    new DataPoint(4, 3),
    new DataPoint(4, 6),
    new DataPoint(5, 3),
    new DataPoint(5, 9),
    new DataPoint(6, 7),
    new DataPoint(7, 2),
    new DataPoint(8, 8),
    new DataPoint(8, 4),
    new DataPoint(9, 3),
    new DataPoint(11, 6)
])

self.groupedData = ko.computed(function () {
    var total = 0;
    var group = -1;
    var myArray = self.data();
    var counter = 0;
    var rows = self.data().length;
    var result = ko.observableArray([]);
    ko.utils.arrayForEach(myArray, function (item) {
        if (group == -1) {
            group = item.group;
        }
        if (group == item.group) {
            total += parseInt(item.num)
        } else {
            var d = new DataPoint(group, total);
            result.pop(d);
            total = 0;
            group = item.group;
            total += parseInt(item.num)
            //alert(d.group + ':' + d.num);
        }
        if (counter == rows - 1) {
            var d = new DataPoint(group, total);
            result.pop(d);
            //alert(d.group + ':' + d.num);
        }
        counter += 1;
    });
    return result();
    },self);
}

ko.applyBindings(new TestViewModel());

И HTML

<body>
Ungrouped Data

<table>
    <thead>
        <tr>
            <td>Group</td>
            <td>Sum</td>
        </tr>
    </thead>
    <tbody data-bind="foreach: data">
        <tr>
            <td>
                <span data-bind="text: group"></span>
            </td>
            <td>
                <span data-bind="text: num"></span>
            </td>
        </tr>
    </tbody>
</table>
<br />
Grouped Data
<table>
    <thead>
        <tr>
            <td>Group</td>
            <td>Sum</td>
        </tr>
    </thead>
    <tbody data-bind="foreach: groupedData">
        <tr>
            <td>
                <span data-bind="text: group"></span>
            </td>
            <td>
                <span data-bind="text: num"></span>
            </td>
        </tr>
    </tbody>
</table>
<script src="Scripts/lib/knockout-3.0.0.js"></script>
<script src="Scripts/app/TestViewModel.js"></script>
</body>

http://jsfiddle.net/gaku6mku/1/

Спасибо заранее за любые советы!

1 ответ

Решение

result.pop(d) должно быть result.push(d),

В бессмертных словах Гомера Симпсона.... дох!

Другие вопросы по тегам