Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有时数据不完整或没有数据-Meteor_Javascript_Mongodb_Meteor_Meteor Blaze_Meteor Accounts - Fatal编程技术网

Javascript 有时数据不完整或没有数据-Meteor

Javascript 有时数据不完整或没有数据-Meteor,javascript,mongodb,meteor,meteor-blaze,meteor-accounts,Javascript,Mongodb,Meteor,Meteor Blaze,Meteor Accounts,我正在尝试编辑和删除Mongo.Collection中的数据。我有一个包含许多字段的文档,包括电子邮件地址 我在更新数据时进行检查,如果存在电子邮件,只需更新电子邮件,否则首先使用Accounts.createUser使用该电子邮件创建一个用户,然后更新数据。虽然数据库中的数据已成功更新,但使用帮助程序显示数据的工作不正常。我试图用保存的值填充表单,要么表单半填充,要么完全填充(通常在第一次编辑尝试中),要么完全为空。我不明白这件事背后的原因 表单模板 <template name="ad

我正在尝试编辑和删除Mongo.Collection中的数据。我有一个包含许多字段的文档,包括电子邮件地址

我在更新数据时进行检查,如果存在电子邮件,只需更新电子邮件,否则首先使用Accounts.createUser使用该电子邮件创建一个用户,然后更新数据。虽然数据库中的数据已成功更新,但使用帮助程序显示数据的工作不正常。我试图用保存的值填充表单,要么表单半填充,要么完全填充(通常在第一次编辑尝试中),要么完全为空。我不明白这件事背后的原因

表单模板

<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">&times;</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的代码吗?