0

友達、

私は Meteor で最初のアプリに取り組んでいて、何かで頭を壁にぶつけています...

1 つのコレクション (「投稿」と呼びます) があり、別のコレクション (「コメント」と呼びます) のドキュメントを関連付けたいという、ブログ + コメントの状況に似たシナリオがあります。

post._id を「postId」フィールドとしてコメントに渡す最善の方法は、フォームが「post/:id」ビューにあるため、Flow Router パラメータを使用することです。

しかし、私の人生では、「var postId = FlowRouter.getParam('postId');」を取得する方法がわかりません。Autoform に渡して入力します。私はそれをスキーマの関数として、フックとして、そしてページ上のフォームの非表示フィールドとして追加しようとしました(明らかにそのルートに行きたくないです)。

Autoform は素晴らしく、使いたいと思っていますが、このくそったれな値を入力できない場合は、難しい方法で配線する必要があるかもしれません。

何か案は?私はここ数日間、これについて壁に頭をぶつけてきました。

ありがとう!

4

2 に答える 2

2

まず、同じページにいるように、ルートが次のように設定されている場合:

FlowRouter.route('/blog/:postId', {
  action: function (params, queryParams) {
    FlowLayout.render('layout', { body: 'postTemplate' });
  },
});

FlowRouter.getParam('postId')AutoForm フック内から呼び出すことができます

AutoForm フックを使用し、完全なスキーマを用意する必要があります。aldeed:collection2スキーマ設定用のパッケージを使用しています。postIdフィールドは明示的に宣言する必要があります。このコードは、サーバーとクライアントの両方で実行されています。

Comments = new Mongo.Collection("comments");

Comments.attachSchema(new SimpleSchema({
  comment: {
    type: String,
    label: "Comment"
  },
  postId: {
    type: String
  }
}));

このようにフォームを設定することは、あなたが望むものではありません:

{{> quickForm collection="Comments" id="commentForm" type="insert"}}

postIdHTML出力にフィールドが表示されるため、これは良くありません。これは望ましくないため、次のようにフォームを完全に定義する必要があります。

{{#autoForm collection="Comments" id="commentForm" type="insert"}}
    <fieldset>
        {{> afQuickField name='comment' rows=6}}
    </fieldset>

    <button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}

次に、AutoForm フックを追加します。このコードはクライアントで実行されています。

var commentHooks = {
  before: {
    insert: function(doc){
      var postId = FlowRouter.getParam('postId');
      doc.postId = postId;
      return doc;
    }
  }
};

AutoForm.addHooks(['commentForm'],commentHooks);

許可/拒否ルールが設定されていることを確認してください。正常に機能するはずです。

于 2016-01-11T01:03:23.403 に答える
0

私もこれと同じユースケースに苦労していました.Meteorフォーラムでこれを見つけました:https ://forums.meteor.com/t/use-flow-router-param-in-autoform/14433/2

スキーマを使用してフォームを作成している場合 (autoform タグまたは quickform タグを使用)、そこに直接配置できます。

例えば:

CampaignId: { タイプ: 文字列、autoform: { 値: function() { return FlowRouter.getParam('campaignId'); }、タイプ:「非表示」} }、

于 2017-01-10T01:49:45.537 に答える