4

Collection2のドキュメントでは、 Schemaの作成方法とSchema をコレクションにアタッチする方法について説明していますが、挿入/更新フォーム、エラー処理、オートフォームを使用しない完全な動作例が欠落していると思います。

Collection2 を使用するように既存のプロジェクトを変更するにはどうすればよいですか? 具体的には:

  • まだする必要がありcheck(Meteor.userId(), String);ますか?
  • もう電話する必要はありませんcheck()か?
  • 認証コードを削除できますか? を呼び出すだけinsert()で、Collection2 はスキーマのおかげですべてのエラーをキャッチしますか?
  • 他に変更すべき点はありますか?

DiscoverMeteor のサンプル コードは次のとおりです。

Meteor.methods({
  postInsert: function(postAttributes) {
    check(Meteor.userId(), String);
    check(postAttributes, {
      title: String,
      url: String
    });

    var errors = validatePost(postAttributes);
    if(errors.title || errors.url) {
      throw new Meteor.Error('invalid-post', 'Set a title and valid URL for your post');
    }

    var user = Meteor.user();
    var post = _.extend(postAttributes, {
      userId: user._id,
      author: user.username,
      submitted: new Date(),
      commentsCount: 0
    });

    var postId = Posts.insert(post);

    return {
      _id: postId
    };
  }
});

validatePost = function(post) {
  var errors = {};

  if(!post.title) {
    errors.title = "Please fill in a headline";
  }
  if(!post.url) {
    errors.url = "Please fill in a URL";
  } else if(post.url.substr(0, 7) != "http://" && post.url.substr(0, 8) != "https://") {
    errors.url = "URLs must begin with http:// or https://";
  }
  return errors;
}

Collection2 を使用するように更新すると、このコードはどのようになりますか?

4

1 に答える 1

1

私はあなたと同じ船に乗っています。基本的にオートフォームを使用してkeyUp検証を実行します。それだけです。一言で言えば、collection2 は _.pick に相当するものを実行し、空の文字列をスキップし、入力をスキーマ タイプに変換し、ドキュメントを検証し、スキーマの自動値関数を実行します。

check()値を強制しようとしないため、いくつかの特殊なケースでは便利ですが、通常は必要ありません。

その検証は、挿入を防止する以上のことはしません。したがって、ユーザー エクスペリエンスを改善し、ユーザーがどこを台無しにしているかを示すために、コードが必要になります。

于 2015-02-21T19:35:37.090 に答える