【问题标题】:pre-populating app settings witha meteor collection使用流星集合预先填充应用程序设置
【发布时间】:2014-01-16 01:39:00
【问题描述】:

我正试图了解流星的工作方式。 我正在构建一个网站原型,我想用 site.title, site.logo, site.contact.number 等数据预先填充它......

我创建了一个Settings 集合:

Settings = new Meteor.Collection('settings');
Settings.insert(
  {
  logo: 'test logo',
  contact: {
    human: '01 01 01 01 01',
    machine: '0101010101'
  }
}
)

是否可以在 html 标记中跨模板检索此数据,因为 Meteor 订阅了该集合?

我正在尝试做以下事情:

    <a href="#" class="logo url" rel="me">{{settings.logo}}</a>
    <a href="{{settings.contact.machine}}" class="logo url" rel="me" {{settings.contact.human}}</a>

目前 Meteor 正在自动发布上运行,所以我不确定是否需要在我的 main.js 文件中执行某些操作。 Meteor 可以自动访问所有值吗?目前它打印[object,object]


更新

我创建了一个 settings.json 文件:

{
  "public" : {
    "logo" : "my fancy company name",
    "contact" : {
      "human" : "01 01 01 01 01 ",
      "machine" : "0044101010101"
    }
  }
}

然后我将我的Handlebars.registerHelper 更改为

Handlebars.registerHelper('view', function(){
  return Meteor.settings.public
});

我现在可以更轻松地访问所有设置,而无需为其创建集合。
干杯

【问题讨论】:

    标签: collections meteor


    【解决方案1】:

    你的方法在几个层面上都是错误的。

    车把表达式{{settings.contact.machine}} 会将*currentContextObject*.settings.contact.machine 插入HTML,其中*currentContextObject* 是模板的数据上下文。

    您的模板的数据上下文是什么?我不知道,但这没关系,因为settings.contact.machine 无论如何都没有意义。 Settings 是文档的集合,但您尝试将其当作单个对象来使用。

    在 JS 中可以使用的是Settings.findOne().contact.machine。要跨模板访问此设置,您需要创建一个全局模板帮助程序,例如:

    if (Meteor.isClient) {
      Handlebars.registerHelper("getMachineContact", function() {
        return Settings.findOne().contact.machine;
      });
    } 
    

    然后你可以在你的 HTML 中使用{{getMachineContact}}

    这个解决方案仍然不是很好,您可能应该使用Meteor.settings 而不是Settings 集合来解决您的用例。

    类似于here,然后您可以创建一个全局模板帮助程序,根据其路径从Meteor.settings 返回任意值,这意味着您可以例如编写{{getSetting "contact.machine"}}。这种方法需要将点符号(“contact.machine”)中的字符串转换为对象引用,因此this 问题可能很有用。

    【讨论】:

    • 我正在尝试做一些有点像 jekyll 中的 .yaml 配置文件的事情。我想在原型制作时设置键值来填充标记。我正在寻找一些基本的东西。实际上,我以自己的方式“几乎”在那里。我用return Settings.find() 添加了一个助手。所以感谢Settings.findOne().blah.blah 提示:)。我对 javascript 不是很了解,所以这里有很多新概念。
    • 但只是为了确保,您是说我不需要创建设置集合,因为我可以在 Meteor.settings 中做同样的事情?
    • 是的,我可以。非常感谢开导:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多