Что делает модуль RequireJS Magento_Ui / js / lib / knockout / extender / bound-node?

8

Модуль начальной загрузки Knockout.js в Magento 2 включает в себя следующий модуль через defineзависимость.

 Magento_Ui/js/lib/knockout/extender/bound-nodes

С технической точки зрения, этот модуль создает обертки для ko.applyBindingsи ko.cleanNodeметодов. Эти оболочки будут хранить определенные модели представлений и узлы в частном javascript WeakMap, а затем возвращать единственный объект реестра, который позволит вам получить доступ к элементам в WeakMap.

Тем не менее, не ясно, какие функции для конечного пользователя-программиста это позволяет. Кто-нибудь здесь знает, для чего этот Magento_Ui/js/lib/knockout/extender/bound-nodesмодуль на самом деле? Или достаточно знаком с внутренностями Knockout.js, чтобы разобраться?

Алан Сторм
источник

Ответы:

2

Magento_Ui/js/lib/knockout/extender/bound-nodesРеестр будет, теоретически, позволяет получать список HTML-DOM узлов, scopedEd для конкретной модели представления. то есть вы должны быть в состоянии сказать что-то вроде этого

boundNodes = requirejs('Magento_Ui/js/lib/knockout/extender/bound-nodes');
reg = requirejs('uiRegistry');    
viewModel = reg.get('customer');
console.log( boundNodes.get(viewModel) );

и получить ссылку на liузел, который ограниченcustomer

<li class="greet welcome" data-bind="scope: 'customer'">
    <!-- ko if: customer().fullname  -->
    <span data-bind="text: new String('Welcome, %1!').replace('%1', customer().firstname)">
    </span>
    <!-- /ko -->
    <!-- ko ifnot: customer().fullname  -->
    <span data-bind="html:'Default welcome msg!'"></span>
    <!-- /ko -->
</li>

Вы заметите использование теоретически и должно . Проблема, согласно этой ветке форума сообщества, заключается в том, что в Magento_Ui/js/lib/knockout/extender/bound-nodesмодуле скрывается некоторое время необнаруженная ошибка . Начиная с ветки 2.1.x, это не тот код, на который можно положиться.

Алан Сторм
источник