我不确定我是否误解了某些内容应该如何工作,但每当我将反应设置为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});
}
});
}
.html文件
<head>
</head>
<body>
{{>hello}}
</body>
<template name="hello">
{{#each number}}
{{this.number}}
{{/each}}
</template>
在上面的例子中,没有打印任何内容。如果我删除{reactive:false},则按预期打印数字。
答案 0 :(得分:-1)
你的代码无法运作;这不是{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();
}
});
}
现在可以正常工作,因为当{Number.find()游标发生变化时会触发var n = Numbers.find().fetch();
。
但这没有多大意义。告诉我你想要达到的目标。
(我敢打赌,你真正想做的事情就更像是这样:Meteor.subscribe('numbers', {reactive:false});
并让帮助者做出反应。
我为你制作了一个快速的流星垫:http://meteorpad.com/pad/4zJTtdLnWcWXLuEuj/collection_reactivity