在Autoform

时间:2015-12-08 16:03:32

标签: meteor meteor-autoform flow-router

我正在制作我在Meteor的第一个应用程序,并在某个东西上撞到墙上......

我有一个类似于博客+评论情况的场景,我有一个集合(称之为'帖子'),并希望关联来自另一个集合的文档(称之为'评论')。

我知道将post._id作为“postId”字段传递给评论的最好方法是使用Flow Router参数,因为表单位于'post /:id'视图中。

但是对于我的生活,我无法弄清楚如何获得“var postId = FlowRouter.getParam('postId');”传递到Autoform所以它填充。我已经尝试将它作为一个函数添加到模式中,作为一个钩子,并作为一个隐藏的字段添加到页面上(显然不想走那条路)。

Autoform非常棒,而且我想使用它,但是如果我无法获得这个非常值的话,可能不得不用它来连接它。

有什么想法吗?我已经在这上面撞墙了几天了。

谢谢!

2 个答案:

答案 0 :(得分:2)

首先,如果您的路线设置如下,我们就在同一页上:

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

您可以从AutoForm挂钩中调用FlowRouter.getParam('postId')

您需要使用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"}}

这不好,因为它会在HTML输出中显示postId字段。我们不想要那样,所以你必须完全定义这样的形式:

{{#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);

确保您设置了允许/拒绝规则,并且它应该正常工作。

答案 1 :(得分:0)

我也在同样的用例中苦苦挣扎,我在Meteor论坛上发现了这一点:https://forums.meteor.com/t/use-flow-router-param-in-autoform/14433/2

  

如果您正在使用架构来构建表单(使用autoform或quickform标签),那么您可以将其放在那里。

例如:

campaignId:{     type:String,     autoform:{         value:function(){             return FlowRouter.getParam('campaignId');         },         类型:“隐藏”     } },