Javascript 有时数据不完整或没有数据-Meteor
我正在尝试编辑和删除Mongo.Collection中的数据。我有一个包含许多字段的文档,包括电子邮件地址 我在更新数据时进行检查,如果存在电子邮件,只需更新电子邮件,否则首先使用Accounts.createUser使用该电子邮件创建一个用户,然后更新数据。虽然数据库中的数据已成功更新,但使用帮助程序显示数据的工作不正常。我试图用保存的值填充表单,要么表单半填充,要么完全填充(通常在第一次编辑尝试中),要么完全为空。我不明白这件事背后的原因 表单模板Javascript 有时数据不完整或没有数据-Meteor,javascript,mongodb,meteor,meteor-blaze,meteor-accounts,Javascript,Mongodb,Meteor,Meteor Blaze,Meteor Accounts,我正在尝试编辑和删除Mongo.Collection中的数据。我有一个包含许多字段的文档,包括电子邮件地址 我在更新数据时进行检查,如果存在电子邮件,只需更新电子邮件,否则首先使用Accounts.createUser使用该电子邮件创建一个用户,然后更新数据。虽然数据库中的数据已成功更新,但使用帮助程序显示数据的工作不正常。我试图用保存的值填充表单,要么表单半填充,要么完全填充(通常在第一次编辑尝试中),要么完全为空。我不明白这件事背后的原因 表单模板 <template name="ad
<template name="addUnit">
<div class="modal fade" id="addUnitModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">{{#if isEdit}}Edit {{else}}Add {{/if}}Unit</h4>
</div>
{{#if tenantError}}
<div class="alert alert-danger" role="alert">{{tenantError}}</div>
{{/if}}
<form class="frmUnit" id="frmUnit">
<div class="modal-body">
<input class="form-control" type="text" placeholder="Unit Name" name="unitName" value="{{selectedUnit.unitName}}"/>
<input class="form-control" type="number" placeholder="Number of Residents" name="residents" value="{{selectedUnit.residents}}"/>
<input class="form-control" type="number" placeholder="Area sqft." name="area" value="{{selectedUnit.area}}"/>
<input class="form-control" type="text" placeholder="Primary Tenant" name="primaryTenant" value="{{selectedUnit.primaryTenant}}"/>
<input class="form-control" type="email" name="tenantEmail" placeholder="Tenant's Email" value="{{selectedUnit.tenantEmail}}"/>
<input class="form-control" type="password" name="tenantPassword" placeholder="Tenant's Password"/>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
{{#if isEdit}}
<button type="submit" class="btnEditUnit btn btn-primary">Edit Unit</button>
{{else}}
<button type="submit" class="btnAddUnit btn btn-primary">Add Unit</button>
{{/if}}
</div>
</form>
</div>
</div>
</div>
</template>
事件
Template.addUnit.helpers({
isEdit: function() {
return Session.get('isEdit');
},
tenantError: function(){
return Session.get('tenantError');
},
selectedUnit: function(){
return Session.get('selectedUnit');
}
});
Template.addUnit.events({
"submit .frmUnit": function(event){
event.preventDefault();
var form = event.target;
if(!Session.get('isEdit')){
console.log('adding');
Meteor.call('addUnit',
Session.get('selectedBuilding')._id,
{
unitName: form.unitName.value,
primaryTenant: form.primaryTenant.value,
tenantEmail: form.tenantEmail.value,
tenantPassword: form.tenantPassword.value,
residents: form.residents.value,
area: form.area.value
}, function(error, result) {
console.log(error, result);
if(!error){
$('#frmUnit')[0].reset();
$('#addUnitModal').modal('hide');
Session.set('tenantError', null);
}else{
Session.set('tenantError', error.reason);
}
});
}else{
console.log('editing');
Meteor.call('editUnit',Session.get('selectedUnit')._id,{
unitName: form.unitName.value,
primaryTenant: form.primaryTenant.value,
residents: form.residents.value,
area: form.area.value,
tenantEmail: form.tenantEmail.value,
tenantPassword: form.tenantPassword.value
}, function(error, result) {
if(!error) {
$('#frmUnit')[0].reset();
$('#addUnitModal').modal('hide');
}else{
Session.set('tenantError', error.reason);
}
});
}
}
});
在服务器上编辑单元
editUnit: function(unitId, unit){
//if the email entered already exists update the email and password
var updatedTenant = Accounts.findUserByEmail(unit.tenantEmail);
if(updatedTenant){
if(unit.tenantPassword && unit.tenantPassword !== ""){
Accounts.setPassword(updatedTenant._id, unit.tenantPassword);
}
Units.update({_id: unitId},
{
$set :{
unitName:unit.unitName,
primaryTenant:unit.primaryTenant,
residents: unit.residents,
area: unit.area,
tenantEmail: unit.tenantEmail
}
});
}else{
//if email doesn't exist already, create a new user first
var newUserId = Accounts.createUser(
{
email: unit.tenantEmail,
password: unit.tenantPassword,
profile:{
firstname: unit.primaryTenant,
lastname:"",
phone:"",
isTenant:true
}
});
if(newUserId){
Units.update({_id: unitId},
{
$set :{
unitName:unit.unitName,
primaryTenant:unit.primaryTenant,
residents: unit.residents,
area: unit.area,
tenantEmail:unit.tenantEmail
}
});
}
}
},
正在从另一个显示表单的单击处理程序设置Session.get('selectedUnit')。该值设置正确,通过将其记录到控制台,我可以看到这一点。
“isEdit”也正在从其他模板的单击处理程序中设置
我有其他表单使用相同的方法,但它们没有帐户创建和验证。是因为这个吗
编辑
Template.owner.events({
"click .editUnit":function(){
Session.set('isEdit', true);
Session.set('selectedUnit', this);
}
});
{{#each buildingUnits}}
<tr>
<td>
{{unitName}}
</td>
<td>
<span class= "editUnit list-icon glyphicon glyphicon-edit" data-target="#addUnitModal" data-toggle="modal" aria-hidden="true" style="padding-right: 4px;"></span>
<span class= "deleteUnit list-icon glyphicon glyphicon-remove" aria-hidden="true"></span>
</td>
</tr>
{{/each}}
Template.owner.events({
“click.editUnit”:函数(){
Session.set('isEdit',true);
Session.set('selectedUnit',this);
}
});
{{{每个建筑单元}
{{unitName}}
{{/每个}}
我已经尝试将其登录到控制台,我得到了正确的结果,就在两行之后,我尝试使用session.get('selectedUnit')返回会话,并尝试将其登录到控制台,这也给出了正确的结果,这意味着会话已成功设置。我们可以看到一些设置selectedUnit的代码吗?我们可以看到一些设置selectedUnit的代码吗?