使用 meteor 和 Aldeed 的自动形式进行动态形式生成和删除
Dynamic form generalion and removal using meteor and Aldeed's autoform
我正在使用 meteor 和 Aldeed 的自动表单来填充我的数据库。
我想要实现的基本功能是这样的:
- 将主体形式正常链接到集合。
- 在主窗体中,有一个按钮
add secondary
,可以动态添加链接到不同集合的窗体。
- 第二种形式有一个
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个次级形式,分别把值
abc
、efg
、hij
放到这三个形式的fieldA
中
- 然后我用
efg
删除了第二个辅助形式,我得到的是剩下的是 abc
和 efg
!!
- 更奇怪的是,当我检查删除表格的
uniqid
是否符合预期(对应于之前的 efg
)。
因此,当我动态删除表单时,我输入的值似乎会以某种方式保留。
任何人都可以帮忙:
- 我正在做的事情出了什么问题,我该如何解决?
- 是否有更好的方法来完成我想做的事情?
我也试过检查答案
,但提供的链接已损坏。
谢谢
我通过完全使用 aldeed:autoform
和 aldeed:collection2
来生成我的表单而不是手动插入辅助模板来解决这个问题。
这可以通过像往常一样创建两个想要的模式,然后将辅助模式作为数组放在主模式上来实现。
那么就是在autoform中使用{{> 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}}
我正在使用 meteor 和 Aldeed 的自动表单来填充我的数据库。 我想要实现的基本功能是这样的:
- 将主体形式正常链接到集合。
- 在主窗体中,有一个按钮
add secondary
,可以动态添加链接到不同集合的窗体。 - 第二种形式有一个
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个次级形式,分别把值
abc
、efg
、hij
放到这三个形式的fieldA
中 - 然后我用
efg
删除了第二个辅助形式,我得到的是剩下的是abc
和efg
!! - 更奇怪的是,当我检查删除表格的
uniqid
是否符合预期(对应于之前的efg
)。
因此,当我动态删除表单时,我输入的值似乎会以某种方式保留。
任何人都可以帮忙:
- 我正在做的事情出了什么问题,我该如何解决?
- 是否有更好的方法来完成我想做的事情?
我也试过检查答案
谢谢
我通过完全使用 aldeed:autoform
和 aldeed:collection2
来生成我的表单而不是手动插入辅助模板来解决这个问题。
这可以通过像往常一样创建两个想要的模式,然后将辅助模式作为数组放在主模式上来实现。
那么就是在autoform中使用{{> 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}}