使用Meteor设置文档标题

时间:2015-08-20 15:50:07

标签: meteor title spacebars

我刚开始使用Meteor。在要本地化的应用程序中,我想设置文档标题。

我正在关注advice given by Bernát

在我的准系统版本中,我只有两个文件:

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"
  }
})

4 个答案:

答案 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}}