gpt4 book ai didi

Meteor template.rendered - 为什么集合是空的?

转载 作者:行者123 更新时间:2023-12-04 15:12:48 25 4
gpt4 key购买 nike

为什么在下面的基本示例中,渲染函数中返回的集合是空的?
自动发布已启用。页面加载后调用命令Coll.find().fetch()在 javascript 控制台中返回正确的条目集

这是代码
t.js

Coll = new  Meteor.Collection("coll");

if (Meteor.isClient) {
Template.tpl.rendered = function(){
console.log(Coll.find().fetch()); // <-- This line prints empty array
};
}

if (Meteor.isServer) {
Meteor.startup(function () {
if (Coll.find().count() === 0) {
var f = ["foo","bar"];
for (var i = 0; i < f.length; i++)
Coll.insert({f: f[i]});
}
});
}

t.html文件
<head>
<title>test</title>
</head>

<body>
{{> tpl}}
</body>

<template name="tpl">
Test tpl
</template>

最佳答案

Meteor 是建立在数据线上的类型结构之上的。这意味着当应用程序最初加载时,首先发送 HTML 和 JS,然后发送数据。

您必须使用 react 性来检查数据更改或检查对集合的订阅何时完成(这需要删除自动发布包)。 (您可以在文档中查看如何将您的应用程序移至手动订阅:http://docs.meteor.com/#publishandsubscribe)

订阅回调会告诉您何时返回数据:

Meteor.subscribe("coll", function() {
//Data subscription complete. All data is downloaded
});

模板也可以是响应式(Reactive)的(就像你正在做的那样)但是 .rendered没有被调用,因为 Meteor 首先检查模板的 html 是否已更改,并且只有在不同时才会更改其 HTML 并调用呈现的回调。

您可以选择 1) 使用 Deps.autorun相反,或

2)我不确定你为什么在你的渲染回调中使用它,但如果有必要把它放在那里,你需要确保模板的 HTML 发生变化,通过从你的集合中引入一些东西来改变它当引入新数据时。

关于Meteor template.rendered - 为什么集合是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com