2013-07-03 3 views
1

У меня есть два ko.observablearray. Один из массивов, которые я заполняю некоторыми значениями, получаемыми с сервера:дополнительная функция ko.observablearray как removeall, indexOf приходит как не поддерживается

`self.AllItems = ko.observableArray ([]);

function (data) { 
    for (var index = 0; index < data.length; index++) { 
    self.AllItems.push(data[index]); 
    } 
}; 

Второй массив с данными, которые я получаю от определенного свойства моей модели.

self.SelectedItems = ko.observableArray(modelData.Modalities); 

Это прекрасно работает.

Теперь я по существу хочу удалить «selecteditems» из «allitems».

Я попытался

self.AllItems.removeAll(self.SelectedItems()); 

Это не работало. И тогда я пытался indexOf, когда получил исключение, в котором говорилось, что объект не поддерживает эту операцию. Я полностью смущен. Скажите, пожалуйста, где я ошибаюсь.

ответ

1

Я сделал fiddle, чтобы показать, что ваша логика хороша.

var all =ko.observableArray([]); 

for(var index = 0; index < 10; index++) { 
    all.push({'name':('item'+index)}); 
} 

var itemsToRemove = ko.observableArray([]) 
itemsToRemove.push(all()[2]); 
itemsToRemove.push(all()[5]); 

all.removeAll(itemsToRemove()); 

console.log(JSON.stringify(all())); 
// results : [{"name":"item0"},{"name":"item1"},{"name":"item3"},{"name":"item4"},{"name":"item6"},{"name":"item7"},{"name":"item8"},{"name":"item9"}] 

Можете ли вы проверить, что находится в моделиData.Modalities?

+0

Проблема, похоже, лежит в другом месте. Мой список AllItems содержит значения, которые я вижу, потому что я привязал его к элементу управления ui, показывает длину как ноль. Я не могу получить доступ к каким-либо элементам в нем. – Nanda

+0

Вы уверены, что не используете modelData.Modalities() вместо modelData.Modalities? – Damien

+0

Да, это прекрасно работает. Я также проверил содержимое массива selectedItems. – Nanda

Смежные вопросы