自动发布的meteor iron路由器未在更新表单中获得预填充字段
可能这与自动发布的meteor iron路由器未在更新表单中获得预填充字段,meteor,iron-router,Meteor,Iron Router,可能这与autoform无关,但由于我不完全确定,我想我也应该把这些信息放在这里。在我的表单中,我没有得到任何我期望的更新表单的预填充字段,而且在我的控制台中有一些我不理解的奇怪输出 相应的路由器部分是: // app/lib/routes.js Router.route('/assignment/:_id', function(){ var assignment = Assignments.findOne({_id: this.params._id}); console.log
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"}
(插入错误可能来自其他地方)可能也有其他一些错误,但我希望输出显示问题所在。我没有得到的是,一开始我似乎没有收到任务,但在第二次呼叫中收到了任务,这对我来说很奇怪(为什么会发生这种情况?)。我对文件夹结构不是很确定,但不是在route.js之后调用publish.js,所以可能有未发布的内容?如果是,那么我的文件放在哪里
可能不重要,但这是我的作业.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>
更改分配
{{>QuickFormCollection=“Assignments”id=“updateAssignmentForm”type=“meteormethod=“updateAssignment”}
那么,为什么路由器被调用了两次,为什么一开始没有输出,为什么这里没有任何预填充字段?(在我的表单中,所有字段都是空的)在订阅返回数据之前,您的路由功能正在运行。您只需将其放入
data
函数中,它将等待:
Router.route('/assignment/:_id',{
data: function(){
return Assignments.findOne({_id: this.params._id});
},
name: 'Assignment',
waitOn: function(){
return Meteor.subscribe('assignments');
}
});
在订阅返回数据之前,路由功能正在运行。您只需将其放入
data
函数中,它将等待:
Router.route('/assignment/:_id',{
data: function(){
return Assignments.findOne({_id: this.params._id});
},
name: 'Assignment',
waitOn: function(){
return Meteor.subscribe('assignments');
}
});
这种语法对我来说似乎更好!但是,当我添加一些
console.log('called')代码>输入到数据函数中,它将被输出两次,再次输出。为什么?看我更新了答案,返回订阅句柄,这很重要!你也可以从这篇文章中受益,为什么返回手柄很重要?我已经阅读了另一篇文章,返回子句柄对我没有帮助,因为I-r需要检查订阅的ready()
状态才能继续。这种语法对我来说似乎更好!但是,当我添加一些console.log('called')代码>输入到数据函数中,它将被输出两次,再次输出。为什么?看我更新了答案,返回订阅句柄,这很重要!你也可以从这篇文章中受益,为什么返回手柄很重要?我已经阅读了另一篇文章,返回子句柄对我没有帮助,因为I-r需要检查订阅的ready()
状态才能继续。