我在理解Meteors的反应性方面遇到了问题。 帮助程序完美地工作,当添加任务时,它将在模板中呈现。 但是,自动运行不起作用,任务仅在第一次记录。
helper和autorun都是反应式计算,所以当Tasks集合发生变化时,它们都应该运行吗?
import { Template } from 'meteor/templating';
import { Tasks } from '../../api/tasks';
import './day.html';
Meteor.subscribe('tasks');
Tracker.autorun(function() {
var tasks = Tasks.find({});
console.log(tasks);
});
Template.day.helpers({
tasks() {
return Tasks.find({});
}
});
答案 0 :(得分:1)
根据Meteor docs:
游标是一个反应数据源。在客户端,第一次在反应计算(例如,模板或自动运行)中使用fetch,map或forEach检索游标文档时,Meteor将注册对基础数据的依赖。
使用帮助程序,您将在模板上进行迭代,以便注册依赖项,但是如果使用Collection.find()
,则不会。如果您尝试Tasks.find().fetch()
或Tasks.find().count()
,每次集合中发生更改时都会看到打印结果,因为您现在有依赖关系,这将触发重新计算。