3

我是一个新手的轨道试图使一个应用程序管理的集合使用Rails 3.标签的翻译我还没有得到太远过去脚手架所以据我知道我用Rails 3的默认JavaScript库(即原型,而不是jQuery)。如何让我的Rails 3表单中的JavaScript不显眼?

我有一个标签集的名称的形式,所需的行为是所有当前标签集的名称将被填充在下拉列表中("label_sets"),并且当您选择一个时,它将填充在:name文本字段($('label_set_name')),并禁用它。如果下拉显示:include_blank值,可以输入一个新的标签集名称。当提交表单时,被重新启用:name文本字段,所以它的价值实际上将得到保存。

此表单不会执行所需的行为,但我认为必须有一种方法可以将:onsubmit:onchange中的javascript重构为另一个文件并使其不显眼。我在网上搜索了关于在Rails 3中制作不引人注意的JavaScript的材料,但是老实说,它被大量的困惑所困扰,并且不知道如何将它应用到我的案例中。任何人都可以提供任何建议吗?我的标签集形式的缩写源代码如下:

# app/views/label_sets/_form.html.erb 
<%= form_for(@label_set, 
      :html => { :onsubmit => "$('label_set_name').enable();" }) do |f| %> 
    # ... 
    <div class="field"> 
    <%= label "label_sets", t('.label_set') %><br /> 
    <%= select_tag("label_sets", 
        options_for_select(LabelSet::NAMES), 
        { :include_blank => t('.new'), 
        :onchange => "if (this.value.empty()) { 
            $('label_set_name').clear(); 
            $('label_set_name').enable(); 
            } else { 
            $('label_set_name').value = this.value; 
            $('label_set_name').disable(); 
            }" }) %><br /> 
    </div> 
    <div class="field">  
    <%= f.label :name %><br />  
    <%= f.text_field :name %> 
    </div> 
    # ... 
<% end %> 

更新:所以我觉得我解决我的问题,或者至少得到了我的表单视图寻找更清洁,采取所有的JavaScript出来,并将其塞进application.js(并在jQuery中写下它来尝试新的东西)。

新的表单视图看起来像:

# app/views/label_sets/_form.html.erb 
<%= form_for(@label_set) do |f| %> 
    # ... 
    <div class="field"> 
    <%= label "label_sets", t('.label_set') %><br /> 
    <%= select_tag("label_sets", 
        options_for_select(LabelSet::NAMES), 
        { :include_blank => t('.new') }) %><br /> 
    </div> 
    <div class="field">  
    <%= f.label :name %><br />  
    <%= f.text_field :name %> 
    </div> 
    # ... 
<% end %> 

application.js看起来像:

# public/javascripts/application.js 
$(function() { 
    $('.new_label_set, .edit_label_set').submit(function() { 
    if ($('#label_set_name').attr('disabled') == true) { 
     $('#label_set_name').removeAttr('disabled'); 
    } 
    }); 

    $('#label_sets').change(function() { 
    if ($(this).val() == '') { 
     $('#label_set_name').val(''); 
     $('#label_set_name').removeAttr('disabled'); 
    } else { 
     $('#label_set_name').val($(this).val()); 
     $('#label_set_name').attr('disabled', true); 
    } 
    }); 
}); 

回答

相关问题