我有一个布局选项卡,我可以在其中添加和删除选项卡,当我创建一个新选项卡时,我想向它添加一个新的 ACE 编辑器 (http://ace.ajax.org/) (i' m 使用 jquery ui 选项卡)但是这样不起作用:
$(function() {
var $tab_title_input = $( "#tab_title"),
$tab_content_input = $( "#tab_content" );
var tab_counter = 3;
// tabs init with a custom tab template and an "add" callback filling in the content
var $tabs = $( "#tabs").tabs({
tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close'>Remove Tab</span></li>",
add: function( event, ui ) {
var tab_content = $tab_content_input.val() || "Tab " + tab_counter + " content.";
$( ui.panel ).append("<div id=\"editor2\">" + tab_content + "</div>"); }
});
// modal dialog init: custom buttons and a "close" callback reseting the form inside
var $dialog = $( "#dialog" ).dialog({
autoOpen: false,
modal: true,
buttons: {
Add: function() {
addTab();
$( this ).dialog( "close" );
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
open: function() {
$tab_title_input.focus();
},
close: function() {
$form[ 0 ].reset();
}
});
// addTab form: calls addTab function on submit and closes the dialog
var $form = $( "form", $dialog ).submit(function() {
addTab();
$dialog.dialog( "close" );
return false;
});
// actual addTab function: adds new tab using the title input from the form above
function addTab() {
var tab_title = $tab_title_input.val() || "Tab " + tab_counter;
$tabs.tabs( "add", "#tabs-" + tab_counter, tab_title )
.tabs( "select", "#tabs-" + tab_counter, tab_title );
tab_counter++;
var content_height = $('.content').height();
$('.ui-tabs-panel').css('height', content_height - 97);
$('div#editor').css('height', content_height - 97);
var editor2 = ace.edit("editor2");
var scroll = editor2.renderer.setHScrollBarAlwaysVisible(false);
var JavaScriptMode = require("ace/mode/javascript").Mode;
editor2.getSession().setMode(new JavaScriptMode());
editor2.setTheme("ace/theme/twilight");
var content_height = $('.content').height();
$('.ui-tabs-panel').css('height', content_height - 97);
$('div#editor').css('height', content_height - 97);
}
// addTab button: just opens the dialog
$( "#add_tab" )
.button()
.click(function() {
$dialog.dialog( "open" );
});
// close icon: removing the tab on click
// note: closable tabs gonna be an option in the future - see http://dev.jqueryui.com/ticket/3924
$( "#tabs span.ui-icon-close" ).live( "click", function() {
var index = $( "li", $tabs ).index( $( this ).parent() );
$tabs.tabs( "remove", index );
});
});
</script>
最佳答案
我创建了一个 fiddle ,以便您可以开始使用 ui 选项卡和 ace 编辑器:http://jsfiddle.net/VEfyU/2/
如您在左侧外部资源下所见,我添加了 jquery ui 和 ace 编辑器 js 文件。我使用 jquery ui 1.10.3 并且没有使用“添加”,因为它现在已被弃用。
JavaScript:
$(document).ready(function() {
// initialize tabs
$('#tabs').tabs();
// array containing all the editors we will create
var editors = [];
// initialize button listener
$('#addTab').on('click', function() {
console.log('add a tab with an ace editor instance');
var tabsElement = $('#tabs');
var tabsUlElement = tabsElement.find('ul');
// the panel id is a timestamp plus a random number from 0 to 10000
var tabUniqueId = new Date().getTime() + Math.floor(Math.random()*10000);
// create a navigation bar item for the new panel
var newTabNavElement = $('<li id="panel_nav_' + tabUniqueId + '"><a href="#panel_' + tabUniqueId + '">' + tabUniqueId + '</a></li>');
// add the new nav item to the DOM
tabsUlElement.append(newTabNavElement);
// create a new panel DOM
var newTabPanelElement = $('<div id="panel_' + tabUniqueId + '" data-tab-id="' + tabUniqueId + '">New editor ' + tabUniqueId + ': <br/></div>');
tabsElement.append(newTabPanelElement);
// refresh the tabs widget
tabsElement.tabs('refresh');
var tabIndex = $('#tabs ul li').index($('#panel_nav_' + tabUniqueId));
console.log('tabIndex: ' + tabIndex);
// activate the new panel
tabsElement.tabs('option', 'active', tabIndex);
// create the editor dom
var newEditorElement = $('<div id="editor_' + tabUniqueId + '">// some code here</div>');
newTabPanelElement.append(newEditorElement);
// initialize the editor in the tab
var editor = ace.edit('editor_' + tabUniqueId);
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");
// set the size of the panel
newTabPanelElement.width('600');
newTabPanelElement.height('600');
// set the size of the editor
newEditorElement.width('500');
newEditorElement.height('500');
// resize the editor
editor.resize();
editors.push({ id: tabUniqueId, instance: editor });
// add an editor/panel close button to the panel dom
var closeButton = $('<button class="close">close</button>');
newTabPanelElement.prepend(closeButton);
});
$('#tabs').on('click', '.close', function() {
console.log('close a tab and destroy the ace editor instance');
console.log($(this).parent());
var tabUniqueId = $(this).parent().attr('data-tab-id');
console.log(tabUniqueId);
var resultArray = $.grep(editors, function(n,i){
return n.id === tabUniqueId;
}, true);
var editor = resultArray[0].instance;
// destroy the editor instance
editor.destroy();
// remove the panel and panel nav dom
$('#tabs').find('#panel_nav_' + tabUniqueId).remove();
$('#tabs').find('#panel_' + tabUniqueId).remove();
});
});
html:
<div id="tabs">
<ul>
</ul>
</div>
<button id="addTab">Add an editor</button>
关于javascript - ACE 编辑器 : create a new editor dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7972619/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
尝试使用bundleopen命令打开gem源代码,accordingtoofficialdocumentationandinstruction.因此,我在.profile中导出编辑器:exportBUNDLER_EDITOR=viexportEDITOR=vi并尝试打开例如rails使用控制台的源代码:bundleopenrails出现错误CouldnotlocaleGemfile[ruby-2.1.1][~/]$:rails-vRails4.0.3[ruby-2.1.1][~/]$:bundle-vBundlerversion1.5.3[ruby-2.1.1][~/]$:bundle
我有一个存储JSON数据的列。当它处于编辑状态时,我不知道如何显示它。serialize:value,JSON=f.fields_for:valuedo|ff|.form-group=ff.label:short=ff.text_field:short,class:'form-control'.form-group=ff.label:long=ff.text_field:long,class:'form-control' 最佳答案 代替=f.fields_for:valuedo|ff|请使用以下代码:=f.fields_for:va
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我正在使用Rails4并遇到以下错误。RoutingErrorNoroutematches[POST]"/logs/1/meals/13/edit我正在使用:meal传递模型对象的form_for,并且编辑页面正确呈现。但是,Rails似乎并没有检查膳食对象是否已经保存,因此它一直尝试将表单发送到#create操作并尝试发出POST请求,而不是将表单发送到更新操作并进行当我点击提交时一个PUT请求。我如何让form_for识别我正在尝试更新现有对象并且需要PUT而不是POST?其他一切正常,我已经运行了所有迁移。我是Rails的新手,几乎一整天都在尝试自己解决这个问题。请帮忙!请注意,