Добавить с нокаутированными элементами js в наблюдаемый массив, но не показывать дубликаты в таблице?

0

У меня есть наблюдаемый массив в моей модели ночного видя js, который привязывается к таблице html на мой взгляд (вид бритвы на MVC).

Эта таблица заполняет элементы из другой таблицы, в которой есть кнопка "добавить", поэтому пользователь может добавить столько же одного элемента в таблицу назначения. Моя проблема в том, что я хочу показать в моей другой таблице только по одному для каждого элемента... поэтому, если пользователь добавляет Item1 30 раз, таблица должна показывать Item1 - 30, а не 30 раз Item1.. но, конечно, наблюдаемый массив должны иметь эти 30 предметов Item1.

Как я могу это сделать?

  • 2
    взгляните на: ko.utils.arrayGetDistinctValues
Теги:
html-table
knockout.js
knockout-2.0

2 ответа

1
Лучший ответ

Попробуйте этот фрагмент кода, где self.items - это ваш исходный массив со всеми элементами.

self.unique = ko.computed(function() {
    var values = ko.utils.arrayMap(self.items(), function(item){ return item.type})
    return ko.utils.arrayGetDistinctValues(values).sort();
});
  • 0
    Что такое метод ko.utils.arrayGetDistinctValues? это новое на нокауте?
0

Попробуйте группировать массив по счету следующим образом:

function GroupArrayByCount(arr) {
    var a = [],
        b = [],
        prev, result = [];

    arr.sort();
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== prev) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length - 1]++;
        }
        prev = arr[i];
    }
    for (var j = 0; j < a.length; j++) {
        result.push({
            name: a[j],
            count: b[j]
        });
    }
    return result;
}

Теперь вызовите его в viewModel, как это.

self.groupedItems = ko.computed(function(){
    return GroupArrayByCount( self.items());
});

Сценарий: http://jsfiddle.net/codovations/edJwu/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню