2011-08-09 3 views
2

Je souhaite créer un (des) modèle (s) jQuery qui sera utilisé dans le projet. Je préférerais mettre les modèles dans un ou plusieurs fichiers séparés et les compiler au démarrage du projet en utilisant la fonction template.Rendre les modèles JQuery réutilisables

Je ne veux pas avoir les modèles dans le balisage, dans les balises de script. Est-ce possible et comment le ferais-je?

+0

oui. C'est possible :) – shabunc

+0

Dans ASP.NET WebForms, vous pouvez créer des modèles en tant que UserControls; dans MVC en tant que vues partielles. Vous pouvez également créer des pages HTML simples contenant le balisage de votre modèle et les charger via $ .load. J'imagine qu'il y a plusieurs façons d'accomplir cela. – RoccoC5

+0

C'est ce que j'ai fait, j'ai créé un partiel pour le (s) template (s). – dagda1

Répondre

0

Comme RoccoC5 suggéré, vous pouvez définir un petit plugin qui va chercher votre modèle à distance, puis ajoutez son contenu dans une balise de script à la tête:

(function ($) { 
    $.loadTmpl = function (url, name) { 
     return $.get(url).success(function (content){ 
      $("head").append($('<script/>', { 
       id: name, 
       type: 'text/template' 
      }).html(content)); 
     }); 
    }; 
}(jQuery)); 

et l'utiliser avec:

$.loadTmpl('hi.html', 'hi').done(function() { 
    $('#hi').tmpl({name: 'Tom'}).appendTo('body'); 
}); 

ou:

$.when(
    $.loadTmpl('foo.html', 'foo'), 
    $.loadTmpl('bar.html', 'bar'), 
    ... 
).done(function() { 
    // All your templates are now loaded 
}); 

Hope this aide.

0

Les modèles sont simplement utilisés comme des chaînes, vous n'avez donc même pas besoin d'injecter des scripts. Passez simplement la chaîne directement à jQuery.template. Donc, en ajustant ce que @abernier a suggéré, vous pouvez faire quelque chose comme suivre. Je fais l'hypothèse que vous nommez les fichiers le même nom que le nom de modèle que vous voulez utiliser et vous les stockez dans TMPLPATH.

$.loadTmpl = function (name) { 
     return $.get(TMPLPATH + name + ".tmpl").success(function (content){ 
      $.template(name, content); 
     }); 
    }; 
Questions connexes