Я изучал Knockout.js и как он работает с Magento 2.
Тогда я дошел до темы: интеграция шаблонов, в первом примере я представлен в этой записи:
<div data-bind="template:'Namespace_Module/sample'"></div>
Который попытается отрендерить шаблон, расположенный по адресу:
app/code/Namespace/Module/view/frontend/web/template/sample.html
Работает в версиях Magento, равных / ниже 2,1.
В более поздних версиях выдается следующая ошибка:
Uncaught TypeError: Unable to process binding "template: function(){return 'Namespace_Module/sample' }"
Message: Cannot read property 'name' of undefined
at RemoteTemplateEngine.makeTemplateSource (engine.js:55)
at RemoteTemplateEngine.renderTemplate (engine.js:116)
at executeTemplate (knockout.js:4886)
at ko.dependentObservable.disposeWhen (knockout.js:4950)
at evaluateImmediate (knockout.js:1737)
at Object.ko.computed.ko.dependentObservable (knockout.js:1946)
at Object.ko.renderTemplate (knockout.js:4942)
at update (knockout.js:5080)
at ko.dependentObservable.disposeWhenNodeIsRemoved (knockout.js:3004)
at evaluateImmediate (knockout.js:1737)
Я пытался понять, почему это происходит, ища изменения в github, но мне не ясно:
https://github.com/magento/magento2/commit/d99043c097816388b2aeec1c23e10bf15e064b28#diff-9ec27f11f8253078a99c9d1e979a07f3
Теперь для этого требуется bindingContext (который содержит атрибут name, запрошенный в исключении), но я не знаю, как он инициализируется.