Массив нокаута отображается как функция, а не как содержимое
У меня есть следующее:
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(); }