У меня есть компонент, который обновляет массив на его родительском элементе. В частности, он принимает дополнения и создает совершенно новый отсортированный массив, перезаписывая исходный массив.
var sortedUpdatedDomainNames = updatedProposedDomainNames.sort(sorts.domainName)
// even though we sort them, after setting the value, getting it returns the unsorted items
debugger;
Введите в отладчике здесь:
sortedUpdatedDomainNames
(4) ["example.com", "www.example.com", "swag.com", "www.swag.com"]
Хорошо, это работает. Элементы массива сортируются (используя sorts.domainName
, который ставит www сразу после родительских доменов)
await parentComponent.set('order.proposedDomainNames', sortedUpdatedDomainNames)
Вот первая проблема: DOM не обновляется должным образом, некоторые элементы дублируются в DOM, даже если они не дублируются в данных.
Однако выполнение parentComponent.update
устраняет эти дубликаты:
// Work around odd ractive bug where DOM doesn't update properly
// Trigger an update manually using .update()
// TODO: find proper fix!
await parentComponent.update('order.proposedDomainNames');
Ее вторая проблема: значения теперь не отсортированы (ну, теперь они отсортированы по алфавиту, а это не то, что мне нужно).
parentComponent.get('order.proposedDomainNames');
(4) ["example.com", "swag.com", "www.example.com", "www.swag.com"]
Как перезаписать массив с помощью Ractive?
Пожалуйста, не отправляйте ответы на вопросы: ractive.splice()
и т. д. — я не знаю заранее индекс, в который будут вставлены данные, я просто хочу отсортировать весь массив и обновить его.
set('path.to.array', ref, { shuffle: true })
, который похож на сплайсинг, но по всему массиву. Вы можете использовать его для сортировки массива за пределами компетенции Ractive и неразрушающего его обновления. - person Chris Reeves   schedule 04.10.2017<component array="{{array.in.parent}}" />
. Если он отображается таким образом, когда выthis.set('array', [...])
из компонента, он должен вести себя точно так же, какthis.set('array.in.parent', [...])
в родительском. - person Chris Reeves   schedule 08.10.2017ractive.set()
с включеннымshuffle
по-прежнему создает несоответствие DOM: prntscr.com/gv6zea. ЗапускorderStatusUI.update('order.proposedDomainNames')
сразу же после этого исправляет DOM, чтобы точно отображать список. - person mikemaccana   schedule 09.10.2017set()
вариантам. Несмотря на то, что массив состоит только из строк, использованиеdeep
вызывает правильное обновление DOM. Вернуть его обратно кshuffle
не удается. Я не совсем уверен, почему, хотя и был бы признателен за ваши мысли! - person mikemaccana   schedule 09.10.2017