私の問題:
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()
でknockout / 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>