2017-10-12 3 views
1

J'ai suivi le lien Start Date to be Greater than End Date. Ci-dessous se trouve le code SimpleSchema.Messages d'erreur personnalisés SimpleSchema en autoform 6.2.0 ne fonctionnant pas

import { Mongo } from 'meteor/mongo'; 
import SimpleSchema from 'simpl-schema'; 
import MessageBox from 'message-box'; 

SimpleSchema.extendOptions(['autoform']); 

MessageBox.defaults({ 
    en: { 
    startDateMustBeSmaller: "From Date must be greater than to Date" 
    } 
}); 

export const Appointments = new Mongo.Collection('Appointments'); 

Appointments.allow({ 
    insert: function(userId, doc){ return !!userId; }, 
    update: function(userId, doc){ return !!userId; }, 
    remove: function(userId, doc){ return !!userId; } 
}); 

AppointmentsSchema = new SimpleSchema({ 
    "fromDate": { 
    type: Date, 
    label: "From Date", 
    autoform: { 
     afFieldInput: { 
     type: "text", 
     } 
    } 
    }, 
    "toDate": { 
    type: Date, 
    label: "To Date", 
    autoform: { 
     afFieldInput: { 
     type: "text", 
     } 
    }, 
    custom: function() { 
     var start = this.field('fromDate'); 
     var end = this; 
     if (start.isSet && end.isSet) { 
     if (moment(end.value).isBefore(start.value)) return "startDateMustBeSmaller"; 
     } 
    } 
    } 
}); 

Appointments.attachSchema(AppointmentsSchema); 

Template.html

{{#autoForm id='insertAppointmentForm' collection=appointment type="insert" doc=this validation="browser"}} 
    <fieldset> 
     <div class="col-sm-6"> 
     {{> afQuickField name='clientId' options=clientsSelect2 select2Options=s2Opts}} 
     </div> 
     <div class="col-sm-6"> 
     {{> afQuickField name='otherDetails'}} 
     </div> 
     <div class="col-sm-6"> 
     {{> afQuickField name='fromDate'}} 
     </div> 
     <div class="col-sm-6"> 
     {{> afQuickField name='toDate'}} 
     </div> 
     <div class="col-sm-6"> 
     {{> afQuickField name='reason'}} 
     </div> 
     <div class="col-sm-6"> 
     {{> afQuickField name='meetingType'}} 
     </div> 
    </fieldset> 
    <div> 
     <button type="submit" class="btn btn-sm bg-olive margin"> 
      <span class="glyphicon glyphicon-ok"></span> Create 
     </button> 
     <button type="submit" class="btn btn-sm bg-navy margin reset"> 
      <span class="glyphicon glyphicon-refresh"></span> Reset 
     </button> 
     <a href="/user/view-appointments" class="btn btn-sm bg-orange margin pull-right" role="button"> 
      <span class="glyphicon glyphicon-eye-open"></span> 
      View Appointments 
     </a> 
    </div> 
{{/autoForm}} 

Lorsque je tente de courir avec le schéma ci-dessus, la forme ne sont pas soumis, ni le client ou le serveur a erreur.

J'ai aussi essayé SimpleSchema.messages({}), SimpleSchema.messageBox.messages({}) mais je reçois method not found error.

Problème: Je veux vérifier si la date de début avant la date de fin. Le code ci-dessus ne fonctionne pas.

Note: J'utilise Meteor 1.5.0 avec aldeed:[email protected], "simpl-schema": "^0.3.2"

Répondre

0

Voyant que vous ne publiez pas votre version Moment.js, je suppose que vous ne l'utilisez pas du tout, alors que la réponse mentionnée fait.

Votre question est dans cette ligne:

if (moment(end.value).isBefore(start.value)) return "startDateMustBeSmaller"; 

Les deux vos champs valeurs ont le même type de Date, de sorte que vous pouvez simplement les comparer:

if (end.value <= start.value) { 
    return 'startDateMustBeSmaller'; 
} 

Ensuite, la question des messages: SimpleSchema.messages et SimpleSchema.prototype.messages ont été supprimés, comme indiqué dans Change Log: 2.0: Other Breaking Changes: Error message changes, mais il semble que la documentation n'a pas encore été mise à jour.

Pour personnaliser votre message d'erreur, vous devez faire comme ceci:

// add this right after AppointmentsSchema definition 
AppointmentsSchema.messageBox.messages({ 
    en: { 
    startDateMustBeSmaller: 'To Date must be greater than From Date', 
    } 
}); 

Ajouté:

Un autre point critique est de passer { tracker: Tracker } comme paramètre options au constructeur new SimpleSchema() pour assurer la réactivité de l'erreur messages.

Source: Change Log: 2.0: Other Breaking Changes:

Réactivité des étiquettes et des messages d'erreur dans le code client n'est plus automatique. Lors de la création de votre instance SimpleSchema, transmettez { tracker: Tracker } dans les options permettant d'activer la réactivité Tracker.

+0

Cela ne fonctionne toujours pas. la page est suspendue. pas d'erreur sur le serveur ou le client. –

+0

@AnkurSoni Que voulez-vous dire par "page se bloque"? L'interface utilisateur ne répond pas? – Styx

+0

Je veux dire Aucune action ne se produit, Form est normal, c'est-à-dire que je peux toujours mettre des entrées correctes et cela fonctionne. Mais quand je mets de mauvaises dates, aucune action ne se produit. –