KnockoutJS 문서를 매우 꼼꼼하게 읽으면 매우 기본적인 Knockout 뷰를 초기화하는 것은 다음과 같습니다.
// 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의 KnockoutJS 사용을 초기화 Magento_Ui/js/lib/ko/initialize
하는 것으로 보이는 모듈을 로드합니다 . 그러나 초기화 모듈의 소스를 보면.
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();
});
Magento가 view object없이ko.applyBindings();
객체 라고 합니다 . 이것은 말이되지 않으며 Knockout 또는 Magento에 대한 제한된 이해가 여기에서 사용자 정의 / 이상한 일을하는지 확실하지 않습니다.
Magento가 실제로 녹아웃 바인딩을 적용하는 곳입니까? 아니면 다른 곳에서 발생합니까? 아니면 Magento가 Knockout 코드를 가로 채어 다른 곳에서 처리하기 까다로운 작업을 수행하고 있습니까?