2013-11-09 20 views
6

Demir yönlendiriciyi kullanırken en iyi HTML başlığı nasıl ayarlanır? İşte yapmak istediğim bu:Demir yönlendiriciyi kullanırken HTML başlığını ayarla

<template name="layout"> 
    <head><title>{{KAZOOM}}</title></head> 
    <body> 
     {{> menu}} 
     {{yield}} 
    </body> 
</template> 

<template name="example"> 
    {{KAZOOM 'example page'}} 
    That's just an example page 
</template> 

<template name="foo"> 
    {{KAZOOM 'foo page'}} 
    Another example page with different HTML title 
</template> 

Sen KAZOOM HTML başlığını ayarlamak için geçmişe yolculuk nasıl? Bu şekilde yapmak istediğim nedeni, içeriğin bir parçası olmak için HTML başlığını düşündüğümdür. Bir sayfanın HTML başlığını, yalnızca onu oluşturan şablonu düzenleyerek ayarlayabilirim. Maalesef bunu başarmak için temiz bir yol görmüyorum. Düşünebildiğim en yakın ürün verim olarak adlandırılacak, daha sonra başlık şablon tarafından değil, rota tarafından ayarlanacaktır.

<template name="head"> 
    <head><title>{{this}}</title></head> 
    {{> menu}} 
</template> 

<template name="example"> 
    {{> head 'example page'}} 
    That's just an example page 
</template> 

<template name="foo"> 
    {{> head 'foo page'}} 
    Another example page with different HTML title 
</template> 

çok güzel değil:

diğer olasılık sadece düzen şablonu bırakmak ve her zaman bir başlık eklemektir. Bunun için uygun bir çözüm var mı? Demir yönlendirici içinde onAfterRun document.title

+1

Cevap buradan ulaşabilirsiniz: http://stackoverflow.com/questions/14036248/meteor-setting-the-document-title –

cevap

16

Seti:

var pageTitle = 'My super web'; 
Router.map(function() { 
    this.route('user', { 
     onAfterRun: function() { 
     document.title = 'User ' + this.params.name + ' - ' + pageTitle; 
     } 
    }); 
}); 

DÜZENLEME:

özel Gidon yardımcı (istemci kodu) oluşturmak, şablonda başlığını ayarlamak istiyorsanız:

Handlebars.registerHelper("KAZOOM", function(title) { 
    if(title) { 
     document.title = title; 
    } else { 
     document.title = "Your default title"; 
    } 
}); 
bunu

kullanıldığı gibi

Ve şablonlar kullanmak

{{KAZOOM 'example page'}} 

veya varsayılan başlık için

{{KAZOOM}} 

. Ben iron-router 0.7.1 kullanıyorum

Router.route('/user', { 
    onAfterAction: function() { 
    document.title = 'page title'; 
    } 
}); 
+0

Teşekkürler, bu statik başlıklar için çalışır. Yine de tüm diğer metinler gibi şablondaki başlığı ayarlamayı tercih ediyorum – sba

+1

Statik başlıklar ne demek istiyorsun? Cevabı güncelledim o zaman. –

+3

Neden paketi kullanmayın: [demir-yönlendirici-başlık] (https://atmospherejs.com/ostrio/iron-router-title)? –

10

:

DÜZENLEME 26 Jully 2015: gibi yeni Demir Router için o görünürdü.

Ve libs/router.js tüm yolları kolları

Router.onAfterAction(function() { 
     document.title = 'My Site - '+this.route.name; 
     } 
); 

bu var, bu yüzden her rotada koymak gerekmez.

+0

this.route.getName() şimdi göründü – IGx89

3

Doğrudan rota tanımında saklanan title özelliğine sahip olmayı tercih ederim.

bu konuda @nullpo tarafından bu yardımcı olur https://github.com/iron-meteor/iron-router/issues/292#issuecomment-38508234

Router.route('/admin/users', { 
    name: 'admin_users', 
    template: 'admin_users', 
    title: 'User Manager' 
    data: function() { 
     return Meteor.users.find(); 
    }, 
    waitOn: function() { 
     return Meteor.subscribe('users_admin'); 
    } 
}); 

Router.after(function(){ 
    if (this.route.options.title) 
     document.title = this.route.options.title + ' - my cool site'; 
}); 

Umut önerildiği gibi

.

+0

Benim için en iyi cevap!Bir reaktif var kullanıyorsanız, başlık parametresinin yeniden değerlendirilmemesi üzücüdür. Bu tür bir işlevsellik istiyorsanız en iyi çözüm ne olurdu? – Wonko