Per una lettura molto superficiale della documentazione di KnockoutJS, l'inizializzazione di una vista Knockout molto semplice è simile alla seguente
// 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());
vale a dire - si crea una funzione javascript destinata ad essere utilizzata come costruttore di oggetti, creare un'istanza di un oggetto da esso e quindi passare quell'oggetto nel ko.applyBindings
metodo dell'oggetto knockout globale ( ko
)
Tuttavia, in Magento 2, se carichi una pagina di back-end con un'interfaccia utente a griglia, Magento inizializzerà il js/core/app.js
modulo 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);
};
});
Questo modulo, a sua volta, carica il Magento_Ui/js/lib/ko/initialize
modulo, che sembra inizializzare l'utilizzo di KnockoutJS da parte di Magento. Tuttavia, se si osserva l'origine del modulo di inizializzazione.
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();
});
Vedi Magento è chiamato l' ko.applyBindings();
oggetto senza un oggetto vista . Questo non ha alcun senso, e non sono sicuro che sia la mia comprensione limitata di Knockout, o Magento che fa qualcosa di personalizzato / strano qui.
È qui che Magento applica effettivamente i vincoli Knockout? O succede altrove? Oppure Magento sta facendo qualcosa di complicato per intercettare il codice Knockout ed elaborarlo altrove?