2013-10-01 1 views
4

J'utilise sitemesh pour un site basé sur le printemps. Le problème est que j'ai un javascript que je veux qu'il fonctionne sur l'événement onload d'une seule page spécifique en utilisant jquery $(function() { ... }) et non sur chaque page.Sitemesh custom javascript par page

J'ai inclus le jquery.js dans le fond de mon décorateur, après le corps. Donc, si j'essaie d'inclure une balise <script> dans le corps de ma page décorée, le script ne sera pas exécuté car jquery sera chargé après cela! Je sais que je pourrais inclure le jquery.js dans l'en-tête de mon décorateur de sorte qu'il sera avant le script personnalisé dans la page décorée mais je n'aime pas vraiment cette solution car elle contiendra javascritp dans la tête de ma page. Je voudrais donc avoir quelque chose comme un espace réservé dans mon décorateur sitemesh où la coutume de ma page décorée sera placée (comme vous pouvez le comprendre, je viens du monde django: p). Est-ce possible ? Proposez-vous quelque chose d'autre ou devrais-je simplement mettre mon jquery.js dans l'en-tête et en finir avec?

Répondre

6

Pour répondre à ma question, après quelques recherches, j'ai trouvé la solution suivante:

I ajouté ce qui suit à la fin de ma page de décorateur (y compris après jquery.js)

 
<decorator:getProperty property="page.local_script"></decorator:getProperty> 

J'ai aussi ajouté les éléments suivants

 
<content tag="local_script"> 
<script> 
    $(function() { 
    alert("Starting"); 
    }); 
</script> 
</content> 

la page de résultat décoré contenait le contenu de la balise local_script exactement où je voulais et tout a bien fonctionné :)

Je ne sais pas pourquoi cette fonctionnalité de sitemesh n'est pas correctement documentée - en utilisant ceci, vous pouvez avoir un bon comportement de modèle (comme django).

+0

bien! Merci pour cela! :) – dork

+1

parfait! Merci – dtelaroli