ปัญหาของฉัน:
ฉันกำลังพยายามเขียนแอป Knockout JS ขนาดเล็กภายใน Magento 2 ฉันพยายามที่จะเริ่มต้นแอปเนื่องจากเมื่อฉันใช้งานko.applyBindings(AppViewModel, document.getElementById("koTest"));
มันจะทำให้ Knockout ที่ใช้โดย Magento ล้มเหลวและพ่นข้อผิดพลาดนี้:
Uncaught Error: You cannot apply bindings multiple times to the same element.
ฉันสงสัยว่าเป็นเพราะ:
ฉันสงสัยว่านี้เป็นเพราะวีโอไอพี 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>