javascript - Meteor 函数在发布和订阅完成加载集合之前执行

标签 javascript mongodb meteor

我有一个 meteor 模板助手,它具有搜索分数文档的功能。如果找不到匹配的文档,则会为用户创建一个新文档。不幸的是,meteor 函数在发布和订阅函数完成之前执行 var Score = UserScores.findOne();。每次都会创建一个新的 UserScore 文档。如果我打开自动发布,这个问题就会消失,并且不会创建重复的记录。如何确保在模板助手执行之前先执行发布和订阅函数?

我是否需要在/lib文件夹中放置一个meteor方法才能正确执行,或者有没有办法在客户端执行它?

var score = UserScores.findOne();

if(!score) {
score = {
    userId: Meteor.userId(),
    total: 0,
    goal: 200
};
UserScores.insert(score);
}

最佳答案

最简单的方法是进行模板级订阅。

Template.myTemplate.onCreated(function() {
    var subscription = this.subscribe('publicationName', publicationArguments);
}

这是一种非常简单的方法,但首先运行助手应该不会有任何问题。

编辑:Discover Meteor 博客有一篇关于模板级订阅的精彩文章。我强烈推荐阅读它:https://www.discovermeteor.com/blog/template-level-subscriptions/

关于javascript - Meteor 函数在发布和订阅完成加载集合之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30950301/

相关文章:

javascript - 将 html 插入到 contenteditable 中,但在其后添加新文本

javascript - 表达 Mongoose 在找到后在 View 上显示数据

javascript - Meteor http调用和字符编码

javascript - 为什么我的 in for each 循环只添加最后一个元素?

javascript - RxJS 的共享运算符在完成时表现不同?

mongodb - GridFS 上传文件时抛出 Command listIndexes failed 异常

mongodb - bson.ObjectId 的零值/零值是多少

javascript - 在 Node.js 中使用 Slim 或 Haml & Sass/SCSS?

javascript - 我如何在更改路线时为页面制作动画?

javascript - 强制 Backbone 或 Underscore 总是转义所有变量?