Я использую Boostrap 4 Tabs. На каждой вкладке у меня есть экземпляр grapesjs.
Один использует плагин веб-страницы:
const productEditor = grapesjs.init({
container: '#gjs',
fromElement: 1,
showOffsets: 1,
allowScripts: 1,
plugins: ['gjs-preset-webpage'],
pluginsOpts: {
'gjs-preset-webpage': {
// ... other options
}
},
storageManager: {
id: 'gjs-',
type: 'remote',
autosave: false,
autoload: true,
stepsBeforeSave: 3,
urlStore: '',
urlLoad: '',
contentTypeJson: true
},
canvas: {},
});
другая вкладка использует плагин рассылки
const newsletterEditor = grapesjs.init({
container: '#newsletter-gjs',
fromElement: 1,
showOffsets: 1,
allowScripts: 1,
plugins: ['gjs-preset-newsletter'],
pluginsOpts: {
'gjs-preset-newsletter': {
modalTitleImport: 'Import template',
// ... other options
}
},
storageManager: {
id: 'gjs-',
type: 'remote',
autosave: false,
autoload: true,
stepsBeforeSave: 3,
urlStore:'',
urlLoad: '',
contentTypeJson: true
},
canvas: {},
});
Что я замечаю, что productEditor
работает правильно. Например, я могу нажать кнопку «текстовый центр», и все хорошо. На второй вкладке кнопка «текстовый центр» не работает.
Я думаю, что это не работает, потому что система видит первый экземпляр grapesjs и игнорирует второй. Есть ли правильный способ инициализации нескольких экземпляров grapesjs на одной странице?
Спасибо за любые предложения!
EDIT
Я думал о том, чтобы сделать что-то вроде этого:
$('a[data-toggle="tab"]').on('shown.bs.tab', function (event) {
const $activeTab = $(event.target); // newly activated tab
const previousTab = event.relatedTarget; // previous active tab
if ($activeTab[0].hash === '#tab-2') {
console.log('product tab is active');
}
if ($activeTab[0].hash === '#tab-3') {
console.log('newsletter tab is active');
}
});
Таким образом, я мог проверить, какая вкладка была открыта, а затем уничтожить или инициализировать ту, которая была активна в данный момент.