自动发布的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()
状态才能继续。