我正试图绕着流星的方式工作。
我正在构建一个网站原型,我想用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
});
我现在可以访问所有设置而无需为它们创建集合,更容易。
欢呼声
答案 0 :(得分: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问题可能有用。