Массив нокаута отображается как функция, а не как содержимое

У меня есть следующее:

this.testArray = ko.observableArray(["a", "b"]);
this.publishedSelectedSets = ko.observableArray().subscribeTo("SELECTED_SETS");

Тогда, на мой взгляд, я имею:

<span data-bind="text: testArray "></span>
<span data-bind="text: publishedSelectedSets "></span>

Я бы ожидал увидеть a,b и затем список содержимого publSelectedSets (просто числа), но то, что отображается:

ВЫБРАННЫЕ УСТАНОВКИ ID: a, b

function observable () {if (arguments.length> 0) {// Write // Игнорировать запись, если значение не изменилось if ((!observable['равенства Comparer']) ||!observable['равенство Comparer'](_latestValue, arguments[0])) { observable.valueWillMutate(); _latestValue = arguments[0]; if (DEBUG) observable._latestValue = _latestValue; observable.valueHasMutated(); } вернуть это; // Разрешает цепочки назначений} else { // Read ko.dependencyDetection.registerDependency(observable); // Звонящий должен быть уведомлен об изменениях только в том случае, если он выполнил операцию "чтения" return _latestValue; } }

Я пытался добавить скобки в конце publishedSelectedSets() но я получаю то же самое. Я могу использовать отладчик, чтобы увидеть _latestValue обновление правильно для publishedSelectedSets массив, но данные не отображаются правильно в DOM.

Что я делаю неправильно?

SELECTED_SETS:

this.selectedSets = ko.computed(

    function () {
        return ko.utils.arrayMap(ko.utils.arrayFilter(vm.data.sets(), function (set) {
            return set.isSelected();
        }), function (set) { return set.setId; });

    }).publishOn("SELECTED_SETS");

JSFiddle, который работает, с упрощенным использованием ko.utils.arrayMap: http://jsfiddle.net/PTSkR/80/

До сих пор не могу понять, почему мой код не работает...

1 ответ

Решение

Ваш publishedSelectedSets массив содержит ko.observable функции, поэтому вы получите странный вывод.

И у вас есть наблюдаемые функции в вашем массиве из-за вашего метода карты:

function (set) { return set.setId; }

Где вы возвращаете саму наблюдаемую функцию с set.setId а не его ценность.

Чтобы исправить это просто потушить ()

function (set) { return set.setId(); }
Другие вопросы по тегам