использование vaadin-grid (Polymer 3.x) в режиме дерева и, следовательно, использование поставщика данных для динамической загрузки элементов при переключении расширенного состояния родительских узлов. Все узлы имеют флажки (vaadin-checkbox), а проверяемое свойство связано со свойством элементов, возвращаемых поставщиком данных.
Когда пользователь проверяет любой узел, мне нужно управлять родителями / потомками этого узла, чтобы обновить дочерние узлы до того же состояния, а родительские - до любого состояния, определяемого состоянием проверки дочерних элементов. Чтобы сузить проблему, если я изменю значение свойства selected некоторых элементов перед загрузкой сетки, флажки правильно показывают отдельные состояния проверки базовых элементов данных.
НО, когда я делаю это программно для того, чтобы управлять потомками / родителями, он не будет распространяться на флажки.
<vaadin-grid>
<vaadin-grid-column>
<template>
<vaadin-grid-tree-toggle expanded="{{expanded}}" leaf="[[!item.HasChildren]]" level="
[[level]]">
</vaadin-grid-tree-toggle>
<div>
<vaadin-checkbox on-change="_onCheck" checked="{{item.IsChecked}}" indeterminate="
{{item.Indeterminate}}">[[item.Title]]
</vaadin-checkbox>
</div>
</template>
</vaadin-grid-column>
</vaadin-grid>
Мой код правильно устанавливает значение свойства фона "IsChecked" для каждого элемента соответственно, но не устанавливает флажок , Я попробовал все виды кода уведомления для Polymer без удачи. В основном:
_onCheck(e) {
if(e.model.item) {
...Get the data item that is currently being edited...
var item = e.model.item;
...Get the child items and set the IsChecked property accordingly...
1. item.Parent.IsChecked = boolVal;
2. this.set('item.Parent.IsChecked', boolVal);
3. this.set('items.*index*.IsChecked', boolVal);
4. this.notifyPath('item.Parent.IsChecked');
5. this.notifyPath('items.*index*.IsChecked');
}}
et c ... Но все равно ничего. Должен быть какой-то способ, которым два способа имеют двустороннюю привязку при использовании режима дерева! Может кто-то увидеть, что я делаю здесь не так?
ОБНОВЛЕНИЕ 1: Я думаю, это должно иметь какое-то отношение к поставщику данных, и сетка дерева постоянно обновляет свои узлы, как они есть расширен / разрушилась. Это по сравнению с обычным массивом элементов, с которым нет таких проблем. Однако сетка дерева может использоваться только с поставщиком данных ... Кроме того, если я сверну родительский узел, который был проверен, а затем разверну его, первый дочерний элемент будет иметь правильный статус, как проверено. Странно.
ОБНОВЛЕНИЕ 2 (и уродливое решение): Это работает, если я вызываю clearCache в сетке после того, как произошло событие проверки. Это нормально для меня, но все же остается вопрос о том, как получить надлежащую привязку к работе.