Dzięki Patryk za sugestię - na pewno skorzystam. Co do kawałka kodu, to trochę go uprościłem tak żeby działał.
Mam małe światełko w tunelu - chyba wiem o co chodzi ale muszę dokładniej sprawdzić.
Oto kod:
var MenuOptions = (function () {
function MenuOptions() {
this.templateEngine = 'bootstrap-v3.7.7';
this.position = 'right';
this.template = '<div class="pb-menu">' +
'<div class="menu-toggler right">' +
'<button type="button" class="btn btn-default btn-toggle-menu">' +
'<i class="glyphicon glyphicon-chevron-left"></i>' +
'</button>' +
'</div>' +
'<div class="menu-wrapper right">' +
'<div class="btn-group" role="group">' +
'<button type="button" class="btn btn-default">' +
'<i class="glyphicon glyphicon-floppy-save"></i>' +
'</button>' +
'<button type="button" class="btn btn-default">' +
'<i class="glyphicon glyphicon-floppy-open"></i>' +
'</button>' +
'</div>' +
'<div class="menu-content">' +
'</div>' +
'</div>' +
'</div>';
this.visible = false;
}
return MenuOptions;
}());
var Options = (function () {
function Options() {
this.templateEngine = 'bootstrap-v3.7.7';
this.menu = new MenuOptions();
this.tab = {
'position': 'right',
'testtab1': 'test'
};
}
return Options;
}());
var pageBuilder;
(function (pageBuilder) {
var PageBuilder = (function () {
function PageBuilder(element, options) {
this.options = new Options();
this.element = element;
this.$element = $(element);
var test = $.extend(true, {}, this.options, options);
console.log(this.options);
console.log(test);
}
return PageBuilder;
}());
PageBuilder.NAME = 'pageBuilder';
pageBuilder.PageBuilder = PageBuilder;
})(pageBuilder || (pageBuilder = {}));
new pageBuilder.PageBuilder(this, {
templateEngine: 'bootstrap-v4.0.0',
menu: {
position: 'left'
},
tab: {
position: 'left'
}
});
Specjalnie dałem u góry jeszcze MenuOptions, żeby pokazać coś o czym wspominał Desu. A mianowicie w zmiennej Options jest coś takiego:
this.menu = new MenuOptions();
this.tab = {
'position': 'right',
'testtab1': 'test'
};
No i teraz jeśli robię "rekursywny" extend z pustym obiektem, this.options oraz options to dostaję dziwne wyniki..., a mianowicie:
{
menu: {
position: "left"
},
tab: {
position: "left",
testtab1: "test"
}
}
Wynika z tego, że $.extend nie radzi sobie z rozszerzaniem obiektów innych niż Object (nie wiem jak to dokładnie napisać). Znalazłem jeszcze coś innego. Jest coś takiego jak Object.assign()
w wyniku czego dostaję już tylko menu.position i tab.position...
W sumie teraz jestem pod ścianą, bo chciałem to napisać w ts ale nie wiem jak... Chyba po prostu te opcje będę musiał zastąpić czystym Object...