Привязка данных в HTML vaadin-grid дереве, обновления данных не распространяются на контроль - PullRequest
0 голосов
/ 12 февраля 2020

использование 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 в сетке после того, как произошло событие проверки. Это нормально для меня, но все же остается вопрос о том, как получить надлежащую привязку к работе.

...