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

时间:2018-05-01 19:48:44

标签: javascript ruby sinatra erb ace-editor

好吧我的js我将输入值设置为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>

将params传递给我的控制器

"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>

在我的控制器中的params我得到一个空字符串

"mode"=>""

1 个答案:

答案 0 :(得分:1)

说明问题

我正在设置会话更改的值

editor.getSession().on("change", function () {

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

});

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

$(document).click(function() {

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

});

和所有工作