我刚开始使用Meteor。在要本地化的应用程序中,我想设置文档标题。
在我的准系统版本中,我只有两个文件:
head.html
<head>
<meta charset="utf-8">
<title>{{localizedTitle}}</title>
</head>
ui.js
UI.registerHelper("localizedTitle", function() {
var title = "Localized Title"
document.title = title;
});
当应用加载时,文档标题为&#34; {{localizedTitle}}&#34;。如果我从控制台调用UI._globalHelpers.localizedTitle()
,则会显示正确的标题。
如果要在页面加载时显示本地化标题,我该怎么办?
编辑:这对我有用,但似乎有点像黑客。title
模板除了自己渲染之外什么都不做,实际上什么都没有给界面添加任何内容。
body.html
<body>
{{> title}}
</body>
<template name="title">
</template>
title.js
Template.title.onRendered(function () {
document.title = getLocalizedString()
function getLocalizedString() {
return "Title : in English"
}
})
答案 0 :(得分:3)
根据Bernát的回答,不应在头部的<title>
标记中调用您的全局帮助程序,而应在您希望拥有给定标题的模板的<template>
标记内调用。在Meteor中,<head>
不算作模板,因此您不能在其中使用Spacebars表示法:它只会被视为简单文本。
另外,请记住,您的助手不会向页面返回(即打印)任何内容。 document.title = "something"
直接为你的`标签分配“东西”。所以不需要在里面打电话给你的助手!
所以,假设你想使用localized
模板获得页面的“本地化标题”标题:
<template name="localized">
<h1>This is the localized page</h1>
{{localizedTitle}}
</template>
在这里,你的诀窍应该有用。
答案 1 :(得分:0)
我发现在我的铁路由器路线中设置 onAfterAction 中的标题很方便:
onAfterAction: function(){
document.title = 'foo'; // ex: your site's name
var routeName = Router.current().route.getName();
if ( routeName ) document.title = document.title + ': ' + routeName;
}
答案 2 :(得分:0)
我认为更优雅的解决方案是使标题反应并通过Session变量设置它(其他反应数据源当然也可以)。像那样:
Template.body.onRendered(function() {
this.autorun(function() {
document.title = Session.get('documentTitle');
});
});
现在每次设置&#39; documentTitle&#39;变量
Session.set('documentTitle', 'Awesome title');
页面标题会改变。不需要黑客攻击,您可以在客户端代码中的任何位置执行此操作。
答案 3 :(得分:0)
请改为尝试:
UI.registerHelper('title', function() {
return 'LocalizedTitle'
});
我们可以在任何你想要的地方使用标题
你可以这样使用{{title}}