javascript - 使用meteor 和 Aldeed 的 autoform 进行动态形式概括和删除

标签 javascript forms meteor meteor-autoform dynamic-forms

我正在使用meteor 和Aldeed 的自动表单来填充我的数据库。 我想要实现的基本功能是这样的:

  • 将主要表单正常链接到集合。
  • 在主表单中,有一个按钮添加辅助,可以动态添加链接到不同集合的表单。
  • 第二种形式有一个remove按钮,可以将其删除。

我遵循了概述的技术 here并将以下代码放在一起:

        <template name="PricipalForm">

        {{#autoForm collection="principal" id="Principalform" type="insert" }}
            <fieldset>
                <legend>Principal form</legend>
                {{> afQuickField name='field1'}}
                {{> afQuickField name='field2'}}
                <button id='add-inputs' type="button">
                        Add Proposal
                 </button>

                 {{#each inputs}}
                        {{> AddSecond}}
                 {{/each}}

            </fieldset>
            <button type="submit" class="btn btn-primary">Insert</button>
        {{/autoForm}}
    </template>

./Templates/PrincipalForm.html

//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////

Template.PrincipalForm.onCreated(function() {
   Session.set('props', []);
 });


  Template.Create.events({
     'click #add-inputs': function () {
      var inputs = Session.get('inputs');
      var uniqid = Math.floor(Math.random() * 100000); /
      inputs.push({uniqid: uniqid});
      Session.set('inputs', inputs);
      }
  });

  Template.Create.helpers({
      inputs: function(){
         return Session.get('inputs');
       }
   });


./Templates/PrincipalForm.js


 ////////////////////////////////////////////////////
 ///////////////////////////////////////////////////


 <template name ="SecondaryFrom">

     {{#autoForm collection="secondary" id="secondaryForm" type="insert" }}
      <fieldset>
       <legend> One instance of secondary form </legend>
          {{> afQuickField name='fieldA'  }}
          {{> afQuickField name='fieldB'}}
      </fieldset>
      <button class='remove-inputs' uniqid="{{uniqid}}" type="button">Remove</button>
{{/autoForm}}

</template>


  ./Templates/SecondaryForm.html

  //////////////////////////////////////////
  //////////////////////////////////////////

  Template.AddProposal.events({
     'click .remove-inputs': function(event) {
         var uniqid = $(event.currentTarget).attr('uniqid');
         var props = Session.get('inputs');
         props = _.filter(props, function(x) { return x.uniqid != uniqid; });
         Session.set('inputs', inputs);
          },

   });


  ./Templates/SecondaryForm.js

这段代码工作正常,只有一个我不明白的错误:

  • 我首先添加 3 个辅助表单,并将值 abcefghij 放入其中的 fieldA 中分别为三种形式。
  • 然后我用 efg 删除第二个辅助形式,我得到的是剩下的 abcefg !!<
  • 更奇怪的是,当我检查已删除表单的 uniqid 是否是预期的(对应于之前的 efg)时。

看来,当我动态删除表单时,我输入的值会以某种方式保留下来。

有人可以帮忙吗:

  • 我正在做的事情出了什么问题,我该如何解决?
  • 是否有更好的方法来完成我想做的事情?

我也尝试检查答案here ,但提供的链接已损坏。

谢谢

最佳答案

我通过完全使用 aldeed:autoformaldeed:collection2 来生成表单,而不是手动插入辅助模板,从而解决了该问题。

这可以通过像往常一样创建两个所需的架构,然后将辅助架构作为数组放到主架构上来实现。

然后是在自动表单中使用 {{> afArrayfield}} 来实现问题中概述的预期结果的问题。

代码将如下所示:

//Schema definition:  
Primary = new Mongo.collection('Primary');
secondary = new SimpleSchema({
   /* ... */
 });
 primary = new SimpleSchema({
   /*...*/
  secondaries:{
   type:[secondary]
  }
 });

Primary.attachSchema(primary);

//On the HTML form:
{{autoform collection="Primary" id= "form_example" type="insert"}}
<fieldset>
   /* any fields*/
   {{afArrayField name = 'secondaries'}}
</fieldset>
{{/autoform}}

关于javascript - 使用meteor 和 Aldeed 的 autoform 进行动态形式概括和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316840/

相关文章:

javascript - 从发布到助手的 Meteor 平均聚合

javascript - 如何通过 JavaScript/jQuery(或 PHP)检测 iPhone 6 和 6 Plus?

C# 加载和卸载表单

node.js - Google Compute Engine、Nginx 和 Meteor 上的 502 错误网关

javascript - 联系表单重定向延迟

javascript - 动态生成的表单只提交mysql表的最后一行ID

javascript - 在 MeteorJS 中检查用户组

javascript - 如何在 Ext.menu.Menu 的项目上禁用浏览器上下文菜单?

javascript - iframe 窗口中的链接以在新选项卡中打开

javascript - ASCII 到键码转换器