隐藏容器块时如何设置ace-editor内容?

时间:2015-05-16 14:42:28

标签: javascript jquery ace-editor

我正在尝试在隐藏容器块时设置ace编辑器内容。

我无法做到这一点。

这是我正在尝试的 http://jsfiddle.net/U5JtP/408/

这是我的代码:

var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");

$('#hide').click(function(){
    $('.panel-body').hide();
    $('#hide').hide();
    $('#Show').hide();
    $('#setValue').show();
});

$('#Show').click(function(){
    $('.panel-body').show();
    $('#setValue').hide();
    $('#Show').hide();
    $('#hide').show();
});

$('#setValue').click(function(){
    editor.getSession().setValue('function foo(items) {}');
    $('.panel-body').hide();
    $('#setValue').hide();
    $('#Show').show();
    $('#hide').hide();
});

////// -------------------------- Click on Hide -> SetValue -> Show
/// Why ace editor did not updated the content and how to update in such scenario?

你能做到这一点吗?

2 个答案:

答案 0 :(得分:1)

正在设置该值,但编辑器未更新。因此,您必须使用updateFull() which is a method of ace editor's VirtualRenderer手动调用它。

这就是调用方法的方法

editor.renderer.updateFull();

将setValue方法更新为类似

的方法
$('#setValue').click(function(){
    editor.getSession().setValue('function foo(items) {}');
    editor.renderer.updateFull();
    $('.panel-body').hide();
    $('#setValue').hide();
    $('#Show').show();
    $('#hide').hide();
});

以下是更新的演示 http://jsfiddle.net/dhirajbodicherla/U5JtP/410/ ;

PS:如果在#setValue点击处理程序中使用了updateFull,我发现更新编辑器有一点延迟。如果在#show点击处理程序中使用了updateFull,则没有延迟。

答案 1 :(得分:1)

我解决了这个问题。显示编辑器块后,应该只设置一个新值和updateFull()。然后它将正常工作。我有同样的问题,但是我尝试过这种方法。现在可以使用

$('#setValue').click(function(){
    $('.panel-body').hide();
    $('#setValue').hide();
    $('#Show').show();
    $('#hide').hide();
    editor.getSession().setValue('function foo(items) {}');
    editor.renderer.updateFull();
});