0
我试图简化下面的代码显示在问题的底部。这里的问题如下:重构Ace编辑器
- 如何使它成为Ace编辑器而不是每个编辑器一次。
- 对于Ace Editor的setValue,每个编辑器都会从后端返回的对象(我无法访问后端)中提取它们的特定信息。您可以在代码中将对象看作widgetEditor和featureEditor。
- 代码现在正常工作,但我相信它可以简化很多。
- Ace编辑器之间的唯一变量是setValue,getSession和ace.edit选项。
- 我检查了下面的链接,与ace.edit选项帮助,但与其他2个值Can Ace Editor support multiple code editors in one page?
那么,什么可以做的方式在这里降低的代码量没仍然使ace编辑器正常工作。基本上,它在同一页面上显示10个ace编辑器,3个用于widgetEditor对象,7个用于featureEditor(如代码所示)。
$.post(engineUrl, {
systemDevCall: true,
engineApiEnabled: engineApiEnabled,
engineDataSplitter: engineDataSplitter,
systemDevType: 'widgetCall',
systemDevValue: [widgetIdSelected,widgetSelected]
},
function(data) {
tabSelected = 'widget';
if (engineApiEnabled != 1) {
var dataSplit = data.split(engineDataSplitter);
var data = dataSplit[1];
}
// Parse Data
var widgetEditor = JSON.parse(data);
// PHP Editor
phpeditor = ace.edit("phpcode");
phpeditor.$blockScrolling = Infinity;
phpeditor.setValue(widgetEditor.php);
phpeditor.setShowPrintMargin(false);
phpeditor.setTheme("ace/theme/monokai");
phpeditor.getSession().setMode("ace/mode/php");
phpeditor.setFadeFoldWidgets();
phpeditor.session.getScrollTop();
phpeditor.session.setScrollTop(1);
phpeditor.session.getScrollLeft();
phpeditor.session.setScrollLeft(1);
phpeditor.focus();
phpeditor.navigateFileStart();
// CSS Editor
csseditor = ace.edit("csscode");
csseditor.$blockScrolling = Infinity;
csseditor.setValue(widgetEditor.css);
csseditor.setShowPrintMargin(false);
csseditor.setTheme("ace/theme/monokai");
csseditor.getSession().setMode("ace/mode/css");
csseditor.setFadeFoldWidgets();
csseditor.session.getScrollTop();
csseditor.session.setScrollTop(1);
csseditor.session.getScrollLeft();
csseditor.session.setScrollLeft(1);
csseditor.focus();
csseditor.navigateFileStart();
// JAVASCRIPT Editor
jseditor = ace.edit("jscode");
jseditor.$blockScrolling = Infinity;
jseditor.setValue(widgetEditor.js);
jseditor.setShowPrintMargin(false);
jseditor.setTheme("ace/theme/monokai");
jseditor.getSession().setMode("ace/mode/javascript");
jseditor.setFadeFoldWidgets();
jseditor.session.getScrollTop();
jseditor.session.setScrollTop(1);
jseditor.session.getScrollLeft();
jseditor.session.setScrollLeft(1);
jseditor.focus();
jseditor.navigateFileStart();
});
});
$('#featureSelection').on('change',function() {
$('#featureSelection').addClass('selectOption');
$('#widgetSelection').removeClass('selectOption');
$('.featureListOptions').show();
if (!$('.featureListOptions li').hasClass('active')) {
$('li.memberProfileHeader').addClass('active');
}
var featureSelected = $(this).val();
var featureIdSelected = $('option:selected', this).data('id');
selectedOption = featureIdSelected;
selectSelected = '#featureSelection';
$('li.memberProfileHeader').on('click',function() {
memberProfileHeaderCodeEditor.focus();
memberProfileHeaderCodeEditor.navigateFileStart();
});
$('li.memberProfilePage').on('click',function() {
memberProfilePageCodeEditor.focus();
memberProfilePageCodeEditor.navigateFileStart();
});
$('li.memberProfileFooter').on('click',function() {
memberProfileFooterCodeEditor.focus();
memberProfileFooterCodeEditor.navigateFileStart();
});
$('li.searchResultHeader').on('click',function() {
searchResultHeaderCodeEditor.focus();
searchResultHeaderCodeEditor.navigateFileStart();
});
$('li.searchResultPage').on('click',function() {
searchResultPageCodeEditor.focus();
searchResultPageCodeEditor.navigateFileStart();
});
$('li.searchResultFooter').on('click',function() {
searchResultFooterCodeEditor.focus();
searchResultFooterCodeEditor.navigateFileStart();
});
$('li.detailPage').on('click',function() {
detailPageCodeEditor.focus();
detailPageCodeEditor.navigateFileStart();
});
$.post(engineUrl, {
systemDevCall: true,
engineApiEnabled: engineApiEnabled,
engineDataSplitter: engineDataSplitter,
systemDevType: 'featureCall',
systemDevValue: [featureIdSelected,featureSelected]
},
function(data) {
tabSelected = 'feature';
if (engineApiEnabled != 1) {
var dataSplit = data.split(engineDataSplitter);
var data = dataSplit[1];
}
// Parse Data
var featureEditor = JSON.parse(data);
// Member Profile Header Editor
memberProfileHeaderCodeEditor = ace.edit("memberProfileHeaderCode");
memberProfileHeaderCodeEditor.$blockScrolling = Infinity;
memberProfileHeaderCodeEditor.setValue(featureEditor.memberProfileHeader);
memberProfileHeaderCodeEditor.setShowPrintMargin(false);
memberProfileHeaderCodeEditor.setTheme("ace/theme/monokai");
memberProfileHeaderCodeEditor.getSession().setMode("ace/mode/php");
memberProfileHeaderCodeEditor.setFadeFoldWidgets();
memberProfileHeaderCodeEditor.session.getScrollTop();
memberProfileHeaderCodeEditor.session.setScrollTop(1);
memberProfileHeaderCodeEditor.session.getScrollLeft();
memberProfileHeaderCodeEditor.session.setScrollLeft(1);
memberProfileHeaderCodeEditor.focus();
memberProfileHeaderCodeEditor.navigateFileStart();
focusedEditor = memberProfileHeaderCodeEditor;
// Member Profile Page Editor
memberProfilePageCodeEditor = ace.edit("memberProfilePageCode");
memberProfilePageCodeEditor.$blockScrolling = Infinity;
memberProfilePageCodeEditor.setValue(featureEditor.memberProfilePage);
memberProfilePageCodeEditor.setShowPrintMargin(false);
memberProfilePageCodeEditor.setTheme("ace/theme/monokai");
memberProfilePageCodeEditor.getSession().setMode("ace/mode/php");
memberProfilePageCodeEditor.setFadeFoldWidgets();
memberProfilePageCodeEditor.session.getScrollTop();
memberProfilePageCodeEditor.session.setScrollTop(1);
memberProfilePageCodeEditor.session.getScrollLeft();
memberProfilePageCodeEditor.session.setScrollLeft(1);
memberProfilePageCodeEditor.focus();
memberProfilePageCodeEditor.navigateFileStart();
focusedEditor = memberProfilePageCodeEditor;
// Member Profile Footer Editor
memberProfileFooterCodeEditor = ace.edit("memberProfileFooterCode");
memberProfileFooterCodeEditor.$blockScrolling = Infinity;
memberProfileFooterCodeEditor.setValue(featureEditor.memberProfileFooter);
memberProfileFooterCodeEditor.setShowPrintMargin(false);
memberProfileFooterCodeEditor.setTheme("ace/theme/monokai");
memberProfileFooterCodeEditor.getSession().setMode("ace/mode/php");
memberProfileFooterCodeEditor.setFadeFoldWidgets();
memberProfileFooterCodeEditor.session.getScrollTop();
memberProfileFooterCodeEditor.session.setScrollTop(1);
memberProfileFooterCodeEditor.session.getScrollLeft();
memberProfileFooterCodeEditor.session.setScrollLeft(1);
memberProfileFooterCodeEditor.focus();
memberProfileFooterCodeEditor.navigateFileStart();
focusedEditor = memberProfileFooterCodeEditor;
// Search Result Header Editor
searchResultHeaderCodeEditor = ace.edit("searchResultHeaderCode");
searchResultHeaderCodeEditor.$blockScrolling = Infinity;
searchResultHeaderCodeEditor.setValue(featureEditor.searchResultHeader);
searchResultHeaderCodeEditor.setShowPrintMargin(false);
searchResultHeaderCodeEditor.setTheme("ace/theme/monokai");
searchResultHeaderCodeEditor.getSession().setMode("ace/mode/php");
searchResultHeaderCodeEditor.setFadeFoldWidgets();
searchResultHeaderCodeEditor.session.getScrollTop();
searchResultHeaderCodeEditor.session.setScrollTop(1);
searchResultHeaderCodeEditor.session.getScrollLeft();
searchResultHeaderCodeEditor.session.setScrollLeft(1);
searchResultHeaderCodeEditor.focus();
searchResultHeaderCodeEditor.navigateFileStart();
focusedEditor = searchResultHeaderCodeEditor;
// Search Result Page Editor
searchResultPageCodeEditor = ace.edit("searchResultPageCode");
searchResultPageCodeEditor.$blockScrolling = Infinity;
searchResultPageCodeEditor.setValue(featureEditor.searchResultPage);
searchResultPageCodeEditor.setShowPrintMargin(false);
searchResultPageCodeEditor.setTheme("ace/theme/monokai");
searchResultPageCodeEditor.getSession().setMode("ace/mode/php");
searchResultPageCodeEditor.setFadeFoldWidgets();
searchResultPageCodeEditor.session.getScrollTop();
searchResultPageCodeEditor.session.setScrollTop(1);
searchResultPageCodeEditor.session.getScrollLeft();
searchResultPageCodeEditor.session.setScrollLeft(1);
searchResultPageCodeEditor.focus();
searchResultPageCodeEditor.navigateFileStart();
focusedEditor = searchResultPageCodeEditor;
// Search Result Footer Editor
searchResultFooterCodeEditor = ace.edit("searchResultFooterCode");
searchResultFooterCodeEditor.$blockScrolling = Infinity;
searchResultFooterCodeEditor.setValue(featureEditor.searchResultFooter);
searchResultFooterCodeEditor.setShowPrintMargin(false);
searchResultFooterCodeEditor.setTheme("ace/theme/monokai");
searchResultFooterCodeEditor.getSession().setMode("ace/mode/php");
searchResultHeaderCodeEditor.setFadeFoldWidgets();
searchResultFooterCodeEditor.session.getScrollTop();
searchResultFooterCodeEditor.session.setScrollTop(1);
searchResultFooterCodeEditor.session.getScrollLeft();
searchResultFooterCodeEditor.session.setScrollLeft(1);
searchResultFooterCodeEditor.focus();
searchResultFooterCodeEditor.navigateFileStart();
focusedEditor = searchResultFooterCodeEditor;
// Detail Page Editor
detailPageCodeEditor = ace.edit("detailPageCode");
detailPageCodeEditor.$blockScrolling = Infinity;
detailPageCodeEditor.setValue(featureEditor.detailPage);
detailPageCodeEditor.setShowPrintMargin(false);
detailPageCodeEditor.setTheme("ace/theme/monokai");
detailPageCodeEditor.getSession().setMode("ace/mode/php");
detailPageCodeEditor.setFadeFoldWidgets();
detailPageCodeEditor.session.getScrollTop();
detailPageCodeEditor.session.setScrollTop(1);
detailPageCodeEditor.session.getScrollLeft();
detailPageCodeEditor.session.setScrollLeft(1);
detailPageCodeEditor.focus();
detailPageCodeEditor.navigateFileStart();
focusedEditor = detailPageCodeEditor;
});
});
这看起来像一个惊人的答案。真漂亮。让我试试ban17,并且会尽快报告。 –
我改变了代码,在第二个块中包含全部7个,并纠正了一些错误,我认为它会起作用,如果你只是复制粘贴它。我在这里实现了类似http://collectcodes.com/basic/php/hello-world/answers。 – ban17
惊人的代码ban17。非常干净,优化和使用简单。优秀作品。 –