代码之家  ›  专栏  ›  技术社区  ›  Daniel Nunez

ace编辑器-传递模式以形成输入

  •  1
  • Daniel Nunez  · 技术社区  · 6 年前

    好的,在我的js Im中,将我的输入值设置为js值

    $('input[name="mode"]').val(editor.session.getMode().$id);
    

    这在我的新视图窗体中运行良好

    <form id="snippetForm" action="/snippets/new" method="POST">
        <input class="hidden" type="text" name="mode" form="snippetForm"/>
    </form>
    

    将参数传递给我的控制器

    "mode"=>"ace/mode/ruby"
    

    但当我对我的更新表单执行相同操作时

    <form id="snippetForm" action="/snippets/<%= @snippet.id %>/edit" method="POST">
        <input class="hidden" type="text" name="mode" form="snippetForm"/>
    
        <input id="hidden" type="hidden" name="_method" value="patch">
    </form>
    

    我在Conroll的params上得到一条空字符串

    "mode"=>""
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Nunez    6 年前

    解决了问题

    我正在设置会话更改的值

    editor.getSession().on("change", function () {
    
        $('input[name="mode"]').val(editor.session.getMode().$id);
    
    });
    

    问题是,我做出了一个危险的假设,即更改模式被视为会话中的更改事件。经过一些测试后,我注意到它起作用了,但只有在提交之前我在编辑器中键入时才起作用。我改为

    $(document).click(function() {
    
        $('input[name="mode"]').val(editor.session.getMode().$id);
    
    });
    

    而且一切正常