2017-10-12 7 views
1

私はStart Date to be Greater than End Dateリンクをたどりました。以下はSimpleSchemaコードです。Autoform 6.2.0のSimpleSchemaカスタムエラーメッセージは動作しません

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}} 

私は上記のスキーマを使用して実行しようとすると、フォームが提出されていないされません、どちらもクライアントまたはサーバがエラーを持っています。

私はまた、SimpleSchema.messages({})を試してみましたSimpleSchema.messageBox.messages({})が、私はmethod not found error.

問題を得る:私は終了日より前の場合、開始日を確認したいが。上記のコードは機能しません。

注:私はaldeed:[email protected]と流星1.5.0を使用しています、"simpl-schema": "^0.3.2"

答えて

0

見て、あなたのMoment.jsバージョンを投稿していなかったとして、私は一方で、あなたがすべてでそれを使用しないことを前提としてい言及された答えはそうです。

あなたの問題は、この行である:

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

あなただけそれらを比較することができますので、どちらも自分のフィールドの値は、Dateの種類があります。

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

次に、メッセージと問題: Change Log: 2.0: Other Breaking Changes: Error message changesに記載されているように、SimpleSchema.messagesSimpleSchema.prototype.messagesの両方が削除されましたが、ドキュメントがまだ更新されていないようです。

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

追加

は、あなたがこのようなことを行う必要がありますあなたのエラーメッセージをカスタマイズするには

もう一つの重要なポイントは、エラーの反応性を確保するためにnew SimpleSchema()コンストラクタにオプションパラメータとして{ tracker: Tracker }を渡すことですメッセージ。

出典:Change Log: 2.0: Other Breaking Changes:クライアントコード内のラベルとエラーメッセージの

反応性は、もはや自動ではありません。 SimpleSchemaインスタンスを作成する場合、トラッカー反応性を有効にするオプションに{ tracker: Tracker }を渡します。

+0

まだ動作しません。ページがハングアップします。サーバーまたはクライアントでエラーは発生しません。 –

+0

@AnkurSoni「ページがハングアップする」とはどういう意味ですか? UIは応答しませんか? – Styx

+0

私は何も起こりません、フォームは正常です、つまり、私はまだ正しいエントリを置くことができ、それは動作します。しかし、間違った日付を入力すると、何も起こりません。 –

関連する問題