gpt4 book ai didi

javascript - 单个模板变量多次调用 meteor 助手

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:26 25 4
gpt4 key购买 nike

Tweets = new Meteor.Collection('tweets');

if (Meteor.isClient) {

Meteor.subscribe('tweets');

Template.Panel.helpers({
items: function() {
var days_tweets = Tweets.find();
console.log(days_tweets.count());
return days_tweets;
});
}

if (Meteor.isServer) {
Meteor.publish('tweets', function() {
return Tweets.find({}, {limit: 1000});
});

模板:

<body>
<h1>This is a list of tweets</h1>
{{> Panel}}
</body>

<template name="Panel">
<h2>A list of tweets sorted by size</h2>
{{#each items}}
<p>item</p>
{{/each}}
</template>

以及页面加载时的控制台输出:

Tweet count:  0
Tweet count: 129
Tweet count: 272
Tweet count: 366
Tweet count: 457
Tweet count: 547
Tweet count: 672
Tweet count: 814
Tweet count: 941
Tweet count: 1000

因此辅助函数在页面加载时触发 10 次(次数各不相同)。谁能解释这里发生了什么?我找不到对此的任何引用,在从模板上的多个 {{ }} 调用助手的情况下接受。还有什么办法可以阻止吗?最终,我需要在呈现推文之前一次性处理这些推文。

最佳答案

当您执行查找 meteor 时,会在您执行查找的集合上注册该模板助手的依赖项。由于这种依赖性,meteor 将为集合的每次修改调用模板助手。

如果您还没有订阅,则您的 mongo 集合的客户端副本中没有加载任何数据。只有当您调用 subscribe 时,meteor 才会开始从服务器拉取数据。

因此该方法被多次调用,因为订阅不断将新文档插入您的 mongo 集合的本地副本,触发对模板助手的新调用。

解决这可能带来的任何问题的最佳模式是在助手中订阅并在订阅上使用就绪方法 documentation . Ready 也是响应式(Reactive)的,因此当所有数据都被拉入时,ready 将更改为 true 并且 helper 将再次被调用。

  Template.Panel.helpers({
items: function() {
var ready = Meteor.subscribe('tweets').ready();
var days_tweets = Tweets.find();

return {
data: days_tweets,
ready: ready
};
});
}

模板本身:

{{#with items}}
{{#if ready}}
{{#each data}}
<p>item</p>
{{/each}}
{{else}}
Show a spinner or whatever
{{/if}}
{{/with}}

关于javascript - 单个模板变量多次调用 meteor 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26913198/

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