2015-08-20 72 views
1

我剛剛開始使用流星。在要本地化的應用中,我想設置文檔標題。使用流星設置文檔標題

我下面的advice given by Bernát

在我的準系統版本,我剛纔2個文件:

head.html

<head> 
    <meta charset="utf-8"> 
    <title>{{localizedTitle}}</title> 
</head> 

ui.js

UI.registerHelper("localizedTitle", function() { 
    var title = "Localized Title" 
    document.title = title; 
}); 

當應用程序加載時,文檔標題爲「{{localizedTitle}}」。如果我從控制檯撥打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" 
    } 
}) 

回答

3

繼伯納特的回答,您的全球幫手不應該在頭的<title>標籤調用,但模板其中的<template>標籤內你希望有一個給定的標題。在Meteor中,<head>不算作模板,因此您不能在其中使用Spacebars符號:它只會被視爲簡單的文本。

另外,請記住,您的幫助程序不會返回(即打印)任何內容到頁面。 document.title = "something"直接將「東西」分配給你的標籤。所以不需要打電話給你的幫手!

所以,說你想擁有「本地化名稱」標題使用localized模板的頁面:

<template name="localized"> 
    <h1>This is the localized page</h1> 
    {{localizedTitle}} 
</template> 

在這裏,你的把戲應該工作。

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; 
} 
+0

我還沒有開始尋找鐵:路由器呢。一心一意。 –

+1

你最終會到達那裏,或流量路由器;) –

+2

在任何情況下,@BraveKenny是正確的,設置文檔標題的唯一方法是從JavaScript。唯一的問題是如何觸發該js運行。你的模板* onRendered *回調,鐵路由器等等都是有效的選擇。 –

0

我覺得更優雅的解決方案是使標題反應,並通過會話設置變量(其他反應性數據源當然也可以)。這樣的:

Template.body.onRendered(function() { 
    this.autorun(function() { 
    document.title = Session.get('documentTitle'); 
    }); 
}); 

現在每次你設定

Session.set('documentTitle', 'Awesome title'); 

的 'DOCUMENTTITLE' 變量的頁面標題會改變的時間。無需黑客,您可以在客戶端代碼中的任何位置執行此操作。

0

試試這個:

UI.registerHelper('title', function() { 
return 'LocalizedTitle' 
}); 

我們可以使用任何你想要

標題,你可以使用這樣{{title}}