【问题标题】:ace editor - passing mode to form input王牌编辑器 - 传递模式以形成输入
【发布时间】:2018-10-11 20:49:59
【问题描述】:

好的,所以在我的 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>

将参数传递给我的控制器

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

在我的控制器参数上我得到一个空字符串

"mode"=>""

【问题讨论】:

  • 他们在同一个页面上吗?尝试命名一种模式1,看看是否能解决它。
  • 不,当它呈现另一个不存在时,它们在单独的视图中,我也尝试过重命名:(帽子是我的第一个想法
  • 这可能与 jquery 准备好与 dom 准备好有关。尝试在设置值之前在浏览器中设置断点,看看 $('input[name="mode"]') 是否返回您认为应该返回的值,或者在该点是否未定义。
  • 很抱歉,我是 js 新手,不太清楚该怎么做
  • 更新:我做了console.log,它吐出了我想要的东西,所以范围很好

标签: javascript ruby sinatra erb ace-editor


【解决方案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);

});

一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多