Как добавить/вставить элемент в ObservableArray в определенном месте с помощью Knockout.js
Все примеры нокаута, которые я нашел, похоже, добавляют новый элемент в конец ObservableArray, используя что-то вроде:
viewModel.SomeItems.push(someNewItem);
Это, конечно, помещает элемент в конец массива.
Как добавить элемент в ObservableArray в определенной позиции?
например. что-то вроде:
viewModel.SomeItems.push(someNewItem, indexToInsertItAt);
Ответы
Ответ 1
Вы можете использовать собственный метод JavaScript splice
-
viewModel.SomeItems.splice(2,0,someNewItem);
Документы здесь - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice
Пример здесь (не специфичный для нокаута) - Как вставить элемент в массив по определенному индексу?
Из документов Knockout -
Для функций, которые изменяют содержимое массива, например, push и сплайсинг, методы KO автоматически запускают отслеживание зависимостей чтобы все зарегистрированные слушатели были уведомлены об изменении, и ваш пользовательский интерфейс автоматически обновляется.
Ответ 2
Для нокаута используйте
viewModel.SomeItems.unshift(someNewItem);
Смотрите также: http://knockoutjs.com/documentation/observableArrays.html
Ответ 3
Я сделал эту функцию расширения, которая хорошо работала для меня. Splice не работал у меня, если бы я добавлял к концу разреженного массива.
ko.observableArray.fn.setAt = function(index, value) {
this.valueWillMutate();
this()[index] = value;
this.valueHasMutated();
}
Это даже работает с:
var a = ko.observableArray(['a', 'b', 'c']);
a.setAt(42, 'the answer');