Was macht das RequireJS-Modul von Magento_Ui / js / lib / knockout / extender / bound-node?

8

Das Knstraout.js-Bootstrap-Modul in Magento 2 enthält das folgende Modul über eine defineAbhängigkeit.

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

Technisch gesehen erstellt dieses Modul Wrapper für die Methoden ko.applyBindingsund ko.cleanNode. Diese Wrapper speichern bestimmte Ansichtsmodelle und Knoten in einem privaten Javascript WeakMapund geben dann ein einzelnes Registrierungsobjekt zurück, mit dem Sie auf Elemente in der Datei zugreifen können WeakMap.

Es ist jedoch nicht klar, welche Funktionen für Endbenutzer-Programmierer dies ermöglicht. Weiß hier jemand, wofür das Magento_Ui/js/lib/knockout/extender/bound-nodesModul eigentlich ist? Oder kennen Sie die Interna von Knockout.j genug, um etwas herauszufinden?

Alan Storm
quelle

Antworten:

2

Mit der Magento_Ui/js/lib/knockout/extender/bound-nodesRegistrierung können Sie theoretisch eine Liste von HTML-DOM-Knoten abrufen, die scopedfür ein bestimmtes Ansichtsmodell bearbeitet wurden. dh Sie sollten in der Lage sein, so etwas zu sagen

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

und erhalten Sie einen Verweis auf den liKnoten, mit dem der Gültigkeitsbereich festgelegt wurdecustomer

<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>

Sie werden die Verwendung von theoretisch bemerken und sollten . Das Problem in diesem Community-Forum-Thread ist, dass seit einiger Zeit ein unentdeckter Fehler im Magento_Ui/js/lib/knockout/extender/bound-nodesModul lauert . Ab dem 2.1.x-Zweig ist dies kein Code, auf den Sie sich verlassen können.

Alan Storm
quelle