Tôi có một trang khá phức tạp nơi tôi có một số phiên bản của CodeMirror trong các tab ẩn trong các tab. Để sau đó làm cho nó phức tạp hơn, tôi nhớ các tab hoạt động cuối cùng.Các tab Bootstrap với CodeMirror
Tôi đã quản lý để có được nó một nửa làm việc (http://codepen.io/anon/pen/LheaF) vấn đề là với các tab Second Editor:
- nó tải các tab thứ hai trước khi các tab Mã Gương chính đã được nhấp vào. Khi bạn bấm vào tab Mã Phản chiếu, nó sẽ không tải chính xác trình soạn thảo, cho đến khi bạn bấm hai lần.
- Tôi muốn các tab thứ hai gọi phương thức
refresh()
nếu phương thức của nó đã được khởi tạo, như tôi làm cho trình chỉnh sửa chính. - Bug nơi sao chép nó các biên tập viên thứ
(function($) {
var mainEditor;
function initMainCodeEditor() {
if (mainEditor instanceof CodeMirror) {
mainEditor.refresh();
} else {
// Load main editor
var el = document.getElementById("codifyme");
mainEditor = CodeMirror.fromTextArea(el, {
lineNumbers: true
});
mainEditor.setSize('100%', 50);
}
}
function initSecondaryCodeEditor() {
var $active = $('#code_mirror_editors > .active > a');
var $sec_tab = $($active.data('target'));
CodeMirror.fromTextArea($sec_tab.find('textarea')[0], {
lineNumbers: true
});
}
$(document).ready(function() {
// Only load editors if tab has been clicked
$('#maintabs > li > a[data-target="#codemirror"]').on('shown.bs.tab', function(e) {
initMainCodeEditor();
});
$('#code_mirror_editors > li > a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
initSecondaryCodeEditor();
});
// Remember tabs
var json, tabsState;
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
json[$(e.target).parents("ul.nav.nav-pills, ul.nav.nav-tabs").attr("id")] = $(e.target).data('target');
localStorage.setItem("tabs-state", JSON.stringify(json));
});
tabsState = localStorage.getItem("tabs-state");
json = JSON.parse(tabsState || "{}");
$.each(json, function(containerId, target) {
return $("#" + containerId + " a[data-target=" + target + "]").tab('show');
});
$("ul.nav.nav-pills, ul.nav.nav-tabs").each(function() {
var $this = $(this);
if (!json[$this.attr("id")]) {
return $this.find("a[data-toggle=tab]:first, a[data-toggle=pill]:first").tab("show");
}
});
}); // doc.ready
})(jQuery);