Meteor 查询在服务器上运行良好但在客户端上运行不正常

Meteor query runs perfectly fine on server but not on client

所以我有一个简单的服务器文件:

import { Meteor } from 'meteor/meteor';

const Animals = new Mongo.Collection("animals");

let animalsFindOne = Targets.findOne({animal: "henry"});
console.log(_.get(animalsFindOne, 'food.favorite.amount'));

以及呈现到模板的 animals.js 文件

import {Template} from "meteor/templating";
import {Mongo} from "meteor/mongo";

import "/imports/ui/targets/animals.html";

const Animals = new Mongo.Collection("animals");
let animalsFindOne = Targets.findOne({animal: "henry"});

Template.targets.helpers({
    foodAmount: function() {
        return _.get(animalsFindOne, 'food.favorite.amount';
    }
});

我可以 return "foo" 作为 foodAmount 并且模板会完美呈现它。对于 _.get,我使用 erasaur:meteor-lodash,它在 server.js 中工作得很好。在服务器控制台中,输出是“5”,这是预期的并且很棒的输出。
我错过了什么?
编辑: 我也安装了 autopublish,我不希望删除它,因为这个软件无论如何都是一个测试。

animalsFindOne 已经定义在 foodAmount 助手之外,因此它不会触发模板的基于反应性的重绘机制。

为了在助手中获得反应性,您需要在助手中调用查询:

import {Template} from "meteor/templating";
import {Mongo} from "meteor/mongo";

import "/imports/ui/targets/animals.html";

const Animals = new Mongo.Collection("animals");


Template.targets.helpers({
    foodAmount: function() {
        let animalsFindOne = Targets.findOne({animal: "henry"});
        return _.get(animalsFindOne, 'food.favorite.amount';
    }
});

编辑:Meteor 允许 optional chaining 使用更新的版本,所以这里不需要 lodash:

Template.targets.helpers({
    foodAmount: function() {
        let animalsFindOne = Targets.findOne({animal: "henry"});
        return animalsFindOne?.food?.favorite?.amount
    }
});