2015-08-20 3 views
1

Я только начинаю с Метеор. В приложении, которое должно быть локализовано, я хочу установить заголовок документа.Установка названия документа с помощью 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; 
}); 

Когда При загрузке приложения заголовок документа «{{localizedTitle}}». Если я вызываю UI._globalHelpers.localizedTitle() с консоли, отображается правильный заголовок.

Что мне нужно сделать, чтобы получить локализованное название, которое будет отображаться при загрузке страницы?


EDIT: Это работает для меня, но, похоже, это взлома. Шаблон 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" прямо присваивает «тег» вашему тегу. Поэтому нет необходимости называть своего помощника внутри него!

Итак, вы хотите иметь «Локализованные Title» заголовок для страницы с помощью 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'); 
    }); 
}); 

Теперь каждый раз, когда вы установите переменную 'DocumentTitle' с

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

заголовок страницы будет меняться. Нет необходимости в хаках, и вы можете сделать это в любом месте вашего клиентского кода.

0

Попробуйте вместо этого:

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

мы можем использовать название, где когда-либо вы хотите

вы можете использовать как этот {{title}}

 Смежные вопросы

  • Нет связанных вопросов^_^