Collections 使用meteor集合预填充应用程序设置

Collections 使用meteor集合预填充应用程序设置,collections,meteor,Collections,Meteor,我在想流星的工作原理。 我正在构建一个网站原型,我想用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

我在想流星的工作原理。 我正在构建一个网站原型,我想用
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'
  }
}
)
当Meteor订阅了该集合时,是否可以在html标记中跨模板检索该数据

我试着做一些事情,比如:

    <a href="#" class="logo url" rel="me">{{settings.logo}}</a>
    <a href="{{settings.contact.machine}}" class="logo url" rel="me" {{settings.contact.human}}</a>
然后我将我的
把手。registerHelper
更改为

Handlebars.registerHelper('view', function(){
  return Meteor.settings.public
});
我现在可以访问所有设置,而无需为它们创建集合,这要容易得多。

干杯

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

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

模板的数据上下文是什么?我不知道,但这并不重要,因为
设置.contact.machine
对任何一种方式都没有意义<代码>设置
是文档的集合,但您试图将其作为单个对象使用

在JS中工作的是
Settings.findOne().contact.machine
。要跨模板访问此设置,您需要创建全局模板帮助器,例如:

if (Meteor.isClient) {
  Handlebars.registerHelper("getMachineContact", function() {
    return Settings.findOne().contact.machine;
  });
} 
然后可以在HTML中使用
{{getMachineContact}

但是这个解决方案并不好,您可能应该使用
设置
集合来解决您的用例


与之类似,您可以创建一个全局模板帮助器,从给定路径的
Meteor.settings
返回任意值,这意味着您可以编写
{{getSetting“contact.machine”}
。这种方法需要将点表示法中的字符串(“contact.machine”)转换为对象引用,这样这个问题可能会有用。

我正在尝试做一些类似于jekyll中的.yaml配置文件的工作。我想在创建原型时设置键值以填充标记。我在找一些基本的东西。事实上,我以我自己的方式“几乎”在那里。我添加了一个带有
返回设置的助手。find()
。谢谢你的
Settings.findOne().blah.blah
tip:)。我对javascript不是很在行,所以这里有很多新概念。但为了确保,你是说我不需要像在Meteor中一样创建设置集合。设置?是的,我可以。非常感谢您的启示:)
if (Meteor.isClient) {
  Handlebars.registerHelper("getMachineContact", function() {
    return Settings.findOne().contact.machine;
  });
}