【问题标题】:Subscribe meteor collection through a handlebars helper通过车把助手订阅流星收藏
【发布时间】:2014-01-23 20:27:45
【问题描述】:

在获取流星知识的过程中,我发现了一个新的障碍。

我在我的应用程序中使用了自动发布功能。 我通过帮助程序注册了一个Settings 集合,以便在全球范围内使用这些值。

// in settings.js
Settings = new Meteor.Collection('settings');
Settings.insert(
  {
  logo: 'Comparer Caisses Enregistreuses',
  contact: {
    human: '01 82 88 19 13',
    machine:'0440182881913'
  },
  headline: 'Comparez les meilleurs fournisseurs de Caisses!',
  tagline: "Obtenez jusqu\'à 4 devis gratuits et économisez votre temps et votre argent",
  offer: 'Economisez <span class="value">jusqu\'a 40%</span> sur votre caisses',
}
)

然后在client/main.js

  Handlebars.registerHelper('view', function(){
    return Settings.findOne();
  });

我现在已经删除了autopublish,我正在尝试重新注册收藏。

在服务器文件夹中:

  // server/publication.js
  Meteor.publish('settings', function(){
    return Settings.findOne();
    // or should it be `return settings` so that I can call `.findOne()` in my helper
  });

在客户端文件夹中:

// client/main.js
  Meteor.subscribe('settings');

  Handlebars.registerHelper('view', function(){
    // here nothing work
    // return settings;
    // return Settings.findOne();
    // not sure how to call the publication
  });

有没有办法通过助手订阅出版物?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    Meteor.publish 应该用于服务器端代码,而不是客户端。

    编辑

    您的更新代码:

      // server/publication.js
      Meteor.publish('settings', function(){
        return Settings.findOne();
        // or should it be `return settings` so that I can call `.findOne()` in my helper
      });
    

    正如您已经指出的,它应该是return Settings.find(),因为作为Meteor.publish 的第二个参数提供的函数应该返回一个或多个游标(而不是findOne() 返回的单个文档)。

    【讨论】:

    • 谢谢,我刚读到这个。我将发布代码移动到服务器文件夹中。但是现在当我尝试通过handlebars.registerHelper 订阅集合时,一切都崩溃了。
    • 所以在publication.js中应该是return Settings.find(),然后在client/main.js中是meteor.subscribe('settings')?我不明白的是如何通过车把助手使设置全局可用。已发布的集合是否默认全局可用?
    • 正确。不知道我是否理解第二个问题。 Settings = new Meteor.Collection('settings');(在服务器和客户端上加载)使分配给Settings的返回订阅句柄在JS中全局可用。 Handlebars.registerHelper('view', function(){...}); 注册了一个全局模板助手,可以在任何模板中使用{{view}}(在您的 HTML 代码中)访问它。在这个模板助手中,你当然可以使用Settings
    • 由于您在模板助手中返回Settings.findOne(),因此您可以例如使用{{view.logo}}
    • 如果你想决定哪些数据由服务器发布(哪些不是)你需要删除autopublish。此步骤独立于设置规则以决定允许谁对已发布的集合执行什么操作。为此,您需要删除 insecure 包并设置特定的 allow 和/或 deny 规则。在这些规则中,您通常会检查您正在处理的用户。所以,是的,您需要用户身份验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2012-09-15
    • 2013-02-05
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多