ตามการอ่านคร่าวๆของเอกสารประกอบ KnockoutJS การเริ่มต้นมุมมองการทำให้ล้มลงพื้นฐานขั้นพื้นฐานจะมีลักษณะดังนี้
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
this.firstName = "Bert";
this.lastName = "Bertington";
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
เช่น - คุณสร้างฟังก์ชั่นจาวาสคริปต์ที่มีวัตถุประสงค์เพื่อใช้เป็นตัวสร้างวัตถุยกตัวอย่างวัตถุจากนั้นส่งวัตถุนั้นไปยังko.applyBindings
วิธีการของวัตถุพิศวงทั่วโลก ( ko
)
อย่างไรก็ตามใน Magento 2 หากคุณโหลดหน้าเว็บแบ็กเอนด์ด้วย Grid UI Magento จะเริ่มต้น js/core/app.js
โมดูล RequireJS
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'./renderer/types',
'./renderer/layout',
'Magento_Ui/js/lib/ko/initialize'
], function (types, layout) {
'use strict';
return function (data) {
types.set(data.types);
layout(data.components);
};
});
ในทางกลับกันโมดูลนี้จะโหลดMagento_Ui/js/lib/ko/initialize
โมดูลซึ่งจะปรากฏขึ้นจะเริ่มต้นการใช้ KnockoutJS ของ Magento อย่างไรก็ตามหากคุณดูที่แหล่งที่มาของโมดูลเริ่มต้น
define([
'ko',
'./template/engine',
'knockoutjs/knockout-repeat',
'knockoutjs/knockout-fast-foreach',
'knockoutjs/knockout-es5',
'./bind/scope',
'./bind/staticChecked',
'./bind/datepicker',
'./bind/outer_click',
'./bind/keyboard',
'./bind/optgroup',
'./bind/fadeVisible',
'./bind/mage-init',
'./bind/after-render',
'./bind/i18n',
'./bind/collapsible',
'./bind/autoselect',
'./extender/observable_array',
'./extender/bound-nodes'
], function (ko, templateEngine) {
'use strict';
ko.setTemplateEngine(templateEngine);
ko.applyBindings();
});
คุณเห็นวีโอไอพีที่เรียกว่า ko.applyBindings();
วัตถุโดยไม่ต้องวัตถุมุมมอง สิ่งนี้ไม่สมเหตุสมผลและฉันไม่แน่ใจว่ามันเป็นความเข้าใจที่ จำกัด ของฉันเกี่ยวกับสิ่งที่น่าพิศวงหรือ Magento ทำสิ่งที่กำหนดเอง / แปลกที่นี่
นี่คือสิ่งที่ Magento ใช้การเชื่อมที่น่าพิศวงจริงหรือ หรือว่าเกิดขึ้นที่อื่น? หรือวีโอไอพีกำลังทำสิ่งที่ยุ่งยากในการสกัดโค้ด Knockout และประมวลผลที่อื่น?