2017-07-28 5 views
0

Pouvez-vous appeler une méthode à partir d'un modèle Yeoman, à la place de l'endroit où une propriété templateData est normalement injectée?Yeoman: pouvez-vous appeler une méthode à l'intérieur d'un modèle?

Je cherche à générer un guid aléatoire à plusieurs reprises dans un modèle. Dans mon fichier modèle _Product.xml je: -

<someNode value="<%= randomGuid %>"> 
<someNode value="<%= randomGuid %>"> 
<someNode value="<%= randomGuid %>"> 
<someNode value="<%= randomGuid %>"> 
<someNode value="<%= randomGuid %>"> 

Puis dans mon générateur de Yeoman je: -

_buildTemplateData() { 
    this.templatedata.randomGuid = uuid.v4(); 
} 

writeToDisk() { 
    this.fs.copyTpl(this.templatePath('_Product.xml'), this.destinationPath('Product.xml'), this.templatedata); 
} 

Et j'espérais obtenir: -

<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 
<someNode value="7F7184CF-23A7-4383-B5BB-E3A383BC6A0A"/> 
<someNode value="5B7A26C1-A449-4B35-94E3-D214C62CEAD7"/> 
<someNode value="641D7EC0-AFB1-4646-8B52-5DC71B8FFC50"/> 
<someNode value="CEB94BA1-D487-4838-A354-FAFB4D8B188A"/> 

mais à la place, je reçois: -

<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 
<someNode value="43EE86E4-AC19-4A82-A053-7FE0857AB1F5"/> 

Je sais que je pourrait créer un groupe de Guids comme propriétés de templateData, et les passer tous, en les référençant individuellement, mais je voudrais éviter cela car je n'ai pas besoin de réutiliser le guid en dehors du fichier Product.xml, et je d aime réduire le code autant que possible. Je cherche aussi à faire quelque chose de similaire avec un appel de fonction .... mais c'est l'exemple le plus basique à poster ici.

Des idées? Merci

Répondre

1

Oui, c'est possible. Passez une fonction en tant que contexte de modèle:

this.fs.copyTpl(a, b, { 
    getUuid:() => uuid.v4() 
}); 

Ensuite, appelez dans votre modèle:

<someNode value="<%= getUuid() %>">