Javascript 使用相同的引导模式添加新对象和编辑该对象

Javascript 使用相同的引导模式添加新对象和编辑该对象,javascript,jquery,ruby-on-rails,twitter-bootstrap,Javascript,Jquery,Ruby On Rails,Twitter Bootstrap,我有一个Rails应用程序,我使用引导模式和Jquery向父对象添加新对象。现在,对于我希望添加的4个不同的子对象来说,这很好(我在父对象页面上呈现了4个单独的模态)。我想重复使用相同的模态来呈现编辑表单(而不是新表单),而不需要向我的页面添加4个额外的模态(大部分相同)。这可能吗 模态示例: <!-- modal for inputting a new company --> <div class="modal fade" id="company_modal" tabinde

我有一个Rails应用程序,我使用引导模式和Jquery向父对象添加新对象。现在,对于我希望添加的4个不同的子对象来说,这很好(我在父对象页面上呈现了4个单独的模态)。我想重复使用相同的模态来呈现编辑表单(而不是新表单),而不需要向我的页面添加4个额外的模态(大部分相同)。这可能吗

模态示例:

<!-- modal for inputting a new company -->
<div class="modal fade" id="company_modal" tabindex="-1" role="dialog" aria-labelledby="company_modal" aria-hidden="true">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
      <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
          <h4 class="modal-title" id="myModalLabel">Add new company</h4>
      </div>
      <div class="modal-body">
        <%= render 'companies/modal' %>
      </div>
    </div>
  </div>
</div>

我认为我必须更改Organization.js中使用的Javascript,以便它能够确定请求是来自“添加新公司”按钮还是来自“编辑公司”按钮。这是最佳做法还是我只是个白痴?

回答您的一个问题,“确定请求是来自“添加新公司”按钮还是来自要使用的“编辑公司”

params[:controller]
params[:action]
确定控制器的目标操作。
或者使用一个会话变量或一些
参数[:from_where_name]
,并在js中检查它。最坏的情况是使用一个隐藏字段或一些
数据字段来传递所需的值。

我认为你的想法是正确的,不,你不是白痴:)

我通常会想到以下几点:

  • 清除#公司#模式的内容-只留下“骨架”-放置我们想要动态操作的内容
  • 编写一个用于呈现模式窗口的通用JQ函数(允许所有参数,如标题、内容、按钮等)
  • 编写用于创建/读取/更新/删除(CRUD)的JQ函数,调用具有不同参数和不同操作的同一JQ模态渲染函数
  • 编写委派事件和动作的函数(将动作分配给模式中的动态按钮,允许调用CRUD函数)
  • 这似乎很多,但我认为它比为不同的动作创建不同的模态更好,更模块化


    但是你必须计划得非常好(确切的外观、字段、变量等等)

    谢谢。我现在想知道开发所有这些对我来说是否更有意义,还是只使用x-editable。一方面,我认为模态的常见用法(用于添加和编辑)这将使用户体验更加一致,另一方面,使用该插件似乎已经解决了许多问题。无论如何,我都很感激您的回答!谢谢,如果已经存在支持您所需(并且有详细文档记录)的插件,那么请尝试:)有时候这是最好的方式(如果我们不需要的话)特殊的“功能”。。。。
    $(document).ready(function () {
    $('#competitor_modal').on('show');
     $('.modal').on('shown.bs.modal', function() {
    $("#competitor_competitor_name").focus();
    var Org;
    Org = $('#organization_id').attr('data-organizationid');
     //pass the organization_id to the hidden text box
    $('#competitor_organization_id').val(Org);
    });
    });
    
    $(document).ready(function(){
    
      $(document).bind('ajaxError', 'form#new_competitor', function(event, jqxhr, settings, exception){
    
    // note: jqxhr.responseJSON undefined, parsing responseText instead
    $(event.data).render_form_errors( $.parseJSON(jqxhr.responseText) );
    
     });
    
    });
    
    params[:controller]
    params[:action]