Selon une lecture très rapide de la documentation KnockoutJS, l'initialisation d'une vue Knockout très basique ressemble à ce qui suit
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
this.firstName = "Bert";
this.lastName = "Bertington";
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
c'est-à-dire que vous créez une fonction javascript destinée à être utilisée comme constructeur d'objet, instanciez un objet à partir de celui-ci, puis passez cet objet dans la ko.applyBindings
méthode de l'objet knockout global ( ko
)
Cependant, dans Magento 2, si vous chargez une page principale avec une interface utilisateur de grille, Magento initialisera le js/core/app.js
module RequireJS
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'./renderer/types',
'./renderer/layout',
'Magento_Ui/js/lib/ko/initialize'
], function (types, layout) {
'use strict';
return function (data) {
types.set(data.types);
layout(data.components);
};
});
Ce module, à son tour, charge le Magento_Ui/js/lib/ko/initialize
module, qui semble initialiser l'utilisation de KnockoutJS par Magento. Cependant, si vous regardez la source du module d'initialisation.
define([
'ko',
'./template/engine',
'knockoutjs/knockout-repeat',
'knockoutjs/knockout-fast-foreach',
'knockoutjs/knockout-es5',
'./bind/scope',
'./bind/staticChecked',
'./bind/datepicker',
'./bind/outer_click',
'./bind/keyboard',
'./bind/optgroup',
'./bind/fadeVisible',
'./bind/mage-init',
'./bind/after-render',
'./bind/i18n',
'./bind/collapsible',
'./bind/autoselect',
'./extender/observable_array',
'./extender/bound-nodes'
], function (ko, templateEngine) {
'use strict';
ko.setTemplateEngine(templateEngine);
ko.applyBindings();
});
Vous voyez Magento appelé l' ko.applyBindings();
objet sans objet de vue . Cela n'a aucun sens, et je ne sais pas si c'est ma compréhension limitée de Knockout, ou Magento fait quelque chose de personnalisé / étrange ici.
Est-ce là que Magento applique réellement les liaisons Knockout? Ou cela se produit-il ailleurs? Ou est-ce que Magento fait quelque chose de délicat pour intercepter le code Knockout et le traiter ailleurs?