友
我正在制作我在Meteor的第一个应用程序,并在某个东西上撞到墙上......
我有一个类似于博客+评论情况的场景,我有一个集合(称之为'帖子'),并希望关联来自另一个集合的文档(称之为'评论')。
我知道将post._id作为“postId”字段传递给评论的最好方法是使用Flow Router参数,因为表单位于'post /:id'视图中。
但是对于我的生活,我无法弄清楚如何获得“var postId = FlowRouter.getParam('postId');”传递到Autoform所以它填充。我已经尝试将它作为一个函数添加到模式中,作为一个钩子,并作为一个隐藏的字段添加到页面上(显然不想走那条路)。
Autoform非常棒,而且我想使用它,但是如果我无法获得这个非常值的话,可能不得不用它来连接它。
有什么想法吗?我已经在这上面撞墙了几天了。
谢谢!
答案 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'); }, 类型:“隐藏” } },