Как донести послание до детей на Мифриловом Виджете - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть мифрил ListWidget, который отображает список Items. Значок, который вы видите справа, позволяет развернуть и свернуть детали. Это поле «развернуто» в каждом состоянии Item vnode.

Теперь я хочу свернуть остальные дочерние элементы, когда расширенные дочерние элементы, поэтому отображается только один расширенный дочерний элемент.

enter image description here

Итак, ListWidget добавляет функцию "requestCChildrenCollapse" к атрибутам каждого Item дочернего элемента. Теперь, когда вы нажимаете одну кнопку расширения дочерних элементов, эта функция вызывается, чтобы свернуть все дочерние элементы перед ее развертыванием.

Моя проблема в том, что я не знаю, как получить доступ к ListItems vnodes из List контекст. vnode.children пусто. vnode.instance.children содержат детей, но в документах говорится, что это частный член и не должен использоваться. Кроме того, они "полностраничные" дети.

Итак, как лучше всего выполнить 1032 * это?

ListWidget

ListWidget = () => {
     view: (vnode) => m(".fullpage", 
        [
            m("div.flexrow", [
                m(
                     "ul.listitems",
                     Object.keys(ListItem.get()).map(id => m(ListItem, {
                        id,
                        collapseChildrenRequest: () => {
                            for (const child of vnode.children) console.log(child);
                        }
                    }
                 )
            ])
        ]
     )
};

Дети на клике:

onclick: () => {
vnodeView.attrs.collapseChildrenRequest();
vnodeView.state.isExpanded = !vnodeView.state.isExpanded;
},
...