javascript - ace 编辑器 - 将模式传递给表单输入

标签 javascript ruby sinatra erb ace-editor

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

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

这在我的新 View 表单中工作正常

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

将参数传递给我的 Controller

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

在 Controller 的参数上我得到一个空字符串

"mode"=>""

最佳答案

解决问题

我正在设置 session 更改的值

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

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

});

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

$(document).click(function() {

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

});

所有工作

关于javascript - ace 编辑器 - 将模式传递给表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122861/

相关文章:

ruby/regex 获取每个单词的第一个字母

ruby - 使用 Ruby 在 Elasticsearch 中保存图像

javascript - 在 Bacon.js 中打破 FRP 蛇的循环

javascript - PHP 编写的 jQuery 和超链接 onclick

javascript - Uncaught ReferenceError : $ is not defined at iterateId

ruby-on-rails - #<String :0x00000003a27a58> 的未定义方法 `each'

ruby-on-rails - 在 Posts 模型中保存的用户 ID,如何呈现该用户?

javascript - Nodeschool learnyounode 过滤器 LS 练习 : Cannot read property 'toString' of undefined

ruby - Sinatra "after"过滤器

ruby - 在 Internet Explorer 上发布期间 Sinatra session 丢失