Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流星铁路由器WaitOn订阅_Javascript_Meteor_Iron Router - Fatal编程技术网

Javascript 流星铁路由器WaitOn订阅

Javascript 流星铁路由器WaitOn订阅,javascript,meteor,iron-router,Javascript,Meteor,Iron Router,在将数据返回到模板之前,我真的很难等待订阅加载特定路由。我可以从服务器上的发布中看到找到了文档,但在客户端上没有文档 如果我对发布进行find().count(),它将显示找到的1个文档,这是正确的,但当我对订阅进行计数时,它将显示0个文档 我尝试了许多不同的方法,比如使用subscriptions:function()而不是waitOn:function(),但都不起作用 Collections.js lib: SinglePackage = new Mongo.Collection("Sin

在将
数据
返回到模板之前,我真的很难等待订阅加载特定路由。我可以从服务器上的发布中看到找到了文档,但在客户端上没有文档

如果我对发布进行find().count(),它将显示找到的1个文档,这是正确的,但当我对订阅进行计数时,它将显示0个文档

我尝试了许多不同的方法,比如使用subscriptions:function()而不是waitOn:function(),但都不起作用

Collections.js lib:

SinglePackage = new Mongo.Collection("SinglePackage");
SinglePackage.allow({
  insert: function(){
    return true;
  },
  update: function(){
    return true;
  },
  remove: function(){
    return true;
  }
});
Publications.js服务器:

Meteor.publish("SinglePackage", function(pack_id) {
 return Packages.find({shortId: pack_id});
});
铁制路由器:

Router.route('/package/:id', {
  name: 'package.show',
  template: 'Package_page',
  layoutTemplate: 'Landing_layout',
  waitOn: function() {
    return Meteor.subscribe('SinglePackage', this.params.id);
  },
  data: function() {
    return SinglePackage.find();
  },
  action: function () {
    if (this.ready()) {
      this.render();
    } else {
      this.render('Loading');
    }
  }
});
我是做错了什么,还是这只是一件复杂的事情?人们可能会认为waitOn会让函数的其余部分等待,直到订阅就绪


非常感谢您的帮助。

在订阅准备就绪之前,
数据功能似乎正在运行。即使
data
函数在订阅准备就绪后运行,它也不会是一个使发布/订阅变得毫无意义的被动数据源

参考订阅的示例,您可以执行以下操作:

Router.route('/package/:id', {
  subscriptions: function() {
    // returning a subscription handle or an array of subscription handles
    // adds them to the wait list.
    return Meteor.subscribe('SinglePackage', this.params.id);
  },

  action: function () {
    if (this.ready()) {
      this.render();
    } else {
      this.render('Loading');
    }
  }
});
然后在template.js中:

Template.Package_page.helpers({
  singlePackage() {
  // This is now a reactive data source and will automatically update whenever SinglePackage changes in Mongo.
    return Package.find().fetch();
  }
}); 
在template.html中,您现在可以使用
singlePackage

<template name="Package_page">
  {#with singlePackage} <!-- Use #each if you're singlePackage is an array -->
    ID: {_id}
  {/with}
</template>

{#带单包}
ID:{u ID}
{/与}

感谢杰里米的帮助。我已经试过了,但可惜它仍然不起作用。如果我在模板级别进行计数,我仍然会返回0个结果在工作流中的哪个点进行计数?OnCreate、onRendered、helper?helper。。那是错的地方吗?这真的很奇怪,我可以在发布中看到文档,但在订阅中看不到。我看到您的集合被定义为
new Mongo.collection(“SinglePackage”)
在您的collection.js中。然后,publication.js有查询
Packages.find({shortId:pack\u id})。在MongoDB中,您的集合名为
SinglePackage
Packages
。因此,我有一个名为Packages的集合,其中包含数千个文档。然后我想要一种一次只调用一个文档的方法,这就是我上面所做的。这样做不对吗?