Почему шаблон привязки данных не работает на 2.2 или выше? - PullRequest
0 голосов
/ 26 марта 2019

Я изучал 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, запрошенный в исключении), но я не знаю, как он инициализируется.

1 Ответ

0 голосов
/ 03 апреля 2019

Попробуйте изменить привязку данных к этому:

<div data-bind="template:{ name : 'Namespace_Module/sample' }"></div>

Так и должно быть!

...