2012-04-18 3 views
1

Пожалуйста, смотрите код (с помощью knockout.js над ASP MVC 3):удалить элемент из списка, knockout.js

self.tags = ko.utils.arrayMap(@Html.Raw(new JavaScriptSerializer().Serialize(Model.Tags)), function(tag) { 
       return { 
        label: tag.Name, 
        value: tag.id 
       }; 
     }); 

self.addTag = function(event, ui){ 
      $(event.target).val(""); 

      var tag = ui.item.label; 
      var id = ui.item.value; 

      self.selectedTags.push("id: " + id + ", Name: " + tag); 
      //Delete selected tag here from list 
      return false; 
     } 

Вопрос заключается в том, как я могу удалить из тегов? (Я попытался использовать remove(), я столкнулся с ошибкой. Но когда я попробую pop(), его успешно)

+1

Если '.pop()' работает, почему бы не использовать его? –

+0

.pop() получает только последний элемент, который вы ввели правильно? Я хочу, чтобы удалить любой элемент в массиве. –

+0

Я вижу, ваше право, в этом случае поп не будет работать. –

ответ

3

Ваш массив тегов - это обычный массив, а не наблюдаемый массив, он не будет иметь метода удаления.

Нокаут имеет помощника для обычных массивов

ko.utils.arrayRemoveItem(array, itemToRemove) 

или вы можете использовать сращивания (на самом деле ko.utils.arrayRemoveItem использует сращивание)

1

Обычно вы можете удалить элемент из массива javascript с помощью сплайсинга.

Поп не работает, поскольку он удаляет только последнее вставленное значение.

var a = [1,2,3] a.splice (1,1); # удалить один элемент в позиции 1 => [1,3]

вы можете использовать это с нокаутом, если хотите.

нокаута также имеет некоторые API, как array.remove (функция (а) {вернуть A.id === 1;}), которая возвращает все элементы, которые имеют идентификатор 1.

РЕДАКТИРОВАТЬ: В качестве примера вы можете посмотреть на этот JsFiddle http://jsfiddle.net/Ng39n/

+0

Я все еще получаю «Ошибка выполнения Microsoft JScript: объект не поддерживает это свойство или метод» при использовании array.remove (function (a) {return a.id === 1;}); есть ли какое-либо отношение ко мне с помощью ko.utils.arrayMap? –

1

Вы можете добавить функцию в вашей модели представления, removeTag, как и следующие:

self.removeTag = function(tag) { self.tags.remove(tag); }) 
Смежные вопросы