我的问题:
我试图在Magento 2中编写一个小型的Knockout JS应用,但我正在努力初始化该应用,因为当我使用ko.applyBindings(AppViewModel, document.getElementById("koTest"));
它破坏了Magento 使用的Knockout并引发此错误时:
Uncaught Error: You cannot apply bindings multiple times to the same element.
我怀疑是因为:
我怀疑这是因为Magento的2已经在使用ko.applyBindings()
中app/code/Magento/Ui/view/base/web/js/lib/knockout/bootstrap.js
。而且由于未指定节点,因此无法ko.applyBindings
再次使用。
如果我不在ko.applyBindings(AppViewModel, document.getElementById("koTest"))
代码中使用,那么我的应用程序不会初始化。
这使我认为我需要以某种方式使用ko.applyBindings()
基因敲除/bootstrap.js,但我不知道该如何使用,有人可以帮忙吗?我对淘汰赛的经验很少。
我的密码
<script type="text/javascript">
require([
'ko'
], function(ko) {
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName();
}, this);
this.capitalizeLastName = function() {
var currentVal = this.lastName();
this.lastName(currentVal.toUpperCase());
};
}
ko.applyBindings(AppViewModel, document.getElementById("koTest"));
});
</script>
<!-- This is a *view* - HTML markup that defines the appearance of your UI -->
<div id="koTest">
<p>First name: <strong data-bind="text: firstName"></strong></p>
<p>Last name: <strong data-bind="text: lastName"></strong></p>
<p>Full name: <strong data-bind="text: fullName"></strong></p>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<p>Full name: <input data-bind="value: fullName" /></p>
<button data-bind="click: capitalizeLastName">Capitalise</button>
</div>