具有自动发布功能的流星铁路由器未以更新形式获取预填充字段
meteor iron-router with autopublish not getting prefilled fields in update form
可能与 autoform
无关,但由于我不完全确定,所以我想我也应该将此信息放在这里。在我的表单中,我没有得到任何我期望更新表单的预填字段,而且我的控制台中有一些我不理解的奇怪输出。
对应的路由部分为:
// app/lib/routes.js
Router.route('/assignment/:_id', function(){
var assignment = Assignments.findOne({_id: this.params._id});
console.log('ass w/' + this.params._id);
console.log(assignment);
this.render('Assignment', {data: assignment});
}, {name: 'assignment.show',
waitOn: function(){
console.log('do the wait');
Meteor.subscribe('assignments');
}
}
);
如您所见,那里已经有很多调试输出。路由貌似调用正确,点击后显示模板
发布在这里:
// app/server/publish.js
Meteor.publish('assignments', function() {return Assignments.find();})
现在,这段代码似乎被调用了多次。进入这条路线后的整体输出为:
do the wait
routes.js:22 ass w/M2gtLf9vbbWCTgxze
routes.js:23 undefined
debug.js:41 insert failed: Access denied. No allow validators set on restricted collection for method 'insert'.
routes.js:27 do the wait
routes.js:22 ass w/M2gtLf9vbbWCTgxze
routes.js:23 Object {_id: "M2gtLf9vbbWCTgxze", title: "Neuer Titel", priority: "high", description: "just do it"}
(插入错误可能来自其他地方)那里可能还有其他一些错误,但我希望输出显示问题。我没有得到的是,一开始我似乎没有得到分配,但在第二次调用时收到了,这对我来说很奇怪(为什么会这样?)。我不太确定文件夹结构,但 publish.js 不是在 route.js 之后调用的,所以可能有未发布的内容?如果是,那么我的文件放在哪里?
可能不重要,但这是我的 assignment.html
<template name="Assignment">
<div class="panel panel-default" id="main">
<div class="panel-heading">Change Assignment</div>
<div class="panel-body">
{{>quickForm collection="Assignments" id="updateAssignmentForm" type="method" meteormethod="updateAssignment"}}
</div>
</div>
</template>
那么,为什么路由器被调用了两次,为什么一开始没有输出,为什么我在这里没有得到任何预填充的字段? (我的表格中所有字段都是空的)
您的路由函数在订阅返回数据之前 运行。您可以简单地将它放在 data
函数中,它会等待:
Router.route('/assignment/:_id',{
data: function(){
return Assignments.findOne({_id: this.params._id});
},
name: 'Assignment',
waitOn: function(){
return Meteor.subscribe('assignments');
}
});
可能与 autoform
无关,但由于我不完全确定,所以我想我也应该将此信息放在这里。在我的表单中,我没有得到任何我期望更新表单的预填字段,而且我的控制台中有一些我不理解的奇怪输出。
对应的路由部分为:
// app/lib/routes.js
Router.route('/assignment/:_id', function(){
var assignment = Assignments.findOne({_id: this.params._id});
console.log('ass w/' + this.params._id);
console.log(assignment);
this.render('Assignment', {data: assignment});
}, {name: 'assignment.show',
waitOn: function(){
console.log('do the wait');
Meteor.subscribe('assignments');
}
}
);
如您所见,那里已经有很多调试输出。路由貌似调用正确,点击后显示模板
发布在这里:
// app/server/publish.js
Meteor.publish('assignments', function() {return Assignments.find();})
现在,这段代码似乎被调用了多次。进入这条路线后的整体输出为:
do the wait
routes.js:22 ass w/M2gtLf9vbbWCTgxze
routes.js:23 undefined
debug.js:41 insert failed: Access denied. No allow validators set on restricted collection for method 'insert'.
routes.js:27 do the wait
routes.js:22 ass w/M2gtLf9vbbWCTgxze
routes.js:23 Object {_id: "M2gtLf9vbbWCTgxze", title: "Neuer Titel", priority: "high", description: "just do it"}
(插入错误可能来自其他地方)那里可能还有其他一些错误,但我希望输出显示问题。我没有得到的是,一开始我似乎没有得到分配,但在第二次调用时收到了,这对我来说很奇怪(为什么会这样?)。我不太确定文件夹结构,但 publish.js 不是在 route.js 之后调用的,所以可能有未发布的内容?如果是,那么我的文件放在哪里?
可能不重要,但这是我的 assignment.html
<template name="Assignment">
<div class="panel panel-default" id="main">
<div class="panel-heading">Change Assignment</div>
<div class="panel-body">
{{>quickForm collection="Assignments" id="updateAssignmentForm" type="method" meteormethod="updateAssignment"}}
</div>
</div>
</template>
那么,为什么路由器被调用了两次,为什么一开始没有输出,为什么我在这里没有得到任何预填充的字段? (我的表格中所有字段都是空的)
您的路由函数在订阅返回数据之前 运行。您可以简单地将它放在 data
函数中,它会等待:
Router.route('/assignment/:_id',{
data: function(){
return Assignments.findOne({_id: this.params._id});
},
name: 'Assignment',
waitOn: function(){
return Meteor.subscribe('assignments');
}
});