Meteor 设置{reactive:false}会导致{{#each}中断吗?

Meteor 设置{reactive:false}会导致{{#each}中断吗?,meteor,Meteor,我不确定我是否误解了某些东西应该是如何工作的,但每当我将reactive设置为false时,它似乎会打断我模板中的{{{each}}循环 我可以通过创建一个新的meteor应用程序,保持autopublish等的完整性,然后使用以下代码,通过一个简单的示例重新创建该问题: .js文件: Numbers = new Mongo.Collection('numbers'); if (Meteor.isClient) { Template.hello.helpers({ number:

我不确定我是否误解了某些东西应该是如何工作的,但每当我将reactive设置为false时,它似乎会打断我模板中的{{{each}}循环

我可以通过创建一个新的meteor应用程序,保持autopublish等的完整性,然后使用以下代码,通过一个简单的示例重新创建该问题:

.js文件:

Numbers = new Mongo.Collection('numbers');

if (Meteor.isClient) {
  Template.hello.helpers({
    number: function() {
      return Numbers.find({},{reactive:false});
    }
  });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    if (Numbers.find().count() === 0) {
      for (var i = 0; i < 100; i++)
        Numbers.insert({number: i});
    }
  });
}
Numbers=newmongo.Collection('Numbers');
if(Meteor.isClient){
Template.hello.helpers({
编号:函数(){
返回数字。查找({},{reactive:false});
}
});
}
if(Meteor.isServer){
Meteor.startup(函数(){
if(Numbers.find().count()==0){
对于(变量i=0;i<100;i++)
插入({number:i});
}
});
}
.html文件

<head>
</head>

<body>
  {{>hello}}
</body>

<template name="hello">
    {{#each number}}
      {{this.number}}
    {{/each}}
</template>

{{>你好}
{{#每个数字}
{{this.number}}
{{/每个}}

在上面的例子中,没有打印任何内容。如果我删除{reactive:false},那么数字将按预期打印。

您的代码无法工作;这不是
{reactive:false}
的目的。这对订阅是有意义的

这里发生的是以下步骤:

  • 应用程序启动
  • 模板被呈现并转到
    Numbers helpers
    ,它不会返回任何内容,因为它尚未从服务器接收到任何内容
  • 而且。。。就这样
您希望看到的是:

  • 应用程序启动
  • 模板被呈现并转到
    Numbers helpers
    ,它不会返回任何内容,因为它尚未从服务器接收到任何内容
  • 因为您没有添加
    {reactive:false}
    选项,所以每次从服务器接收到内容时,都会重放计算并更新模板
如果您添加将触发计算的内容,它将起作用:

if (Meteor.isClient) {
  Meteor.subscribe('numbers');
  Template.hello.helpers({
    number: function() {
      var n = Numbers.find().fetch();
      return Numbers.find({},{reactive:false}).fetch();
    }
  });
}
由于
var n=Numbers.find().fetch()

但这没有多大意义。告诉我你想要实现什么

(我敢打赌,你真正想做的是:
Meteor.subscribe('numbers',{reactive:false});
并让助手做出反应


我给你做了一个快速的流星垫来玩它:

谢谢fabien,这解释了为什么什么都没有出现。我想,{reactive:false}只是.find()上的一个选项,我看不到任何关于订阅的引用?我的最终目标是,我有一个按投票顺序排列的列表。我不想更改顺序,也不想在手动刷新页面之前添加/删除列表中的项目。因此,你必须使订阅非反应性,杀死它,并在页面重新加载时重新制作。嘿@fabien,你怎么做我们这样做“使订阅无反应,杀死它,并在页面重新加载时重新创建”