J'essaie de développer un moyen simple de créer des modèles en JavaScript. L'idée de base est que j'ai le HTML dans une page qui représente l'interface utilisateur d'un objet en JavaScript, et les variables dans ce HTML qui sont remplacées par les propriétés de l'objet JavaScript. Pensez-y comme technique pour lier des objets JavaScript à des présentations HTML.Amélioration d'une simple technique de création de modèle JavaScript
Des critiques? Dois-je utiliser des fragments de document en quelque sorte? Je suis essentiellement à la recherche d'un code de révision sur celui-ci. J'apprécierais tout commentaire. (Notez que ceci devrait être indépendant du framework.) Voici un exemple fonctionnel.
<html>
<body>
<!-- where templates will be injected into -->
<div id="thumbContainer"></div>
<!-- template used for thumbnails -->
<div id="thumbTemplate" style="display:none">
<div class="thumb">
<div>${caption}</div>
<div>${image}</div>
</div>
</div>
</body>
<script type="text/javascript">
(function() {
// Cache the templates' markup in case that template is used again
var cache = [];
// Magic
document.templatized = function(templateId, properties) {
// Get the template from cache or get template and add to cache
var template = cache[templateId] || (function() {
cache[templateId] = document.getElementById(templateId).innerHTML;
return cache[templateId];
})();
// Create the DOM elements that represent the markup
var shell = document.createElement('div');
shell.innerHTML = template.replace(/\$\{(\w+)\}/g, function(match, key){
return properties[key] || match;
});
// Return those DOM elements
return shell.children[0].cloneNode(true);
};
})();
// Create DOM elements with values bound to thumbnail object
var thumb = document.templatized('thumbTemplate', {
caption: 'Summer',
image: (function() {
// More complicated logic that requires conditions here...
return '<img src="test.png" />';
})()
});
// Display on page by inserting into DOM
document.getElementById('thumbContainer').appendChild(thumb);
</script>
+1 pour // magic – cherouvim
Haha, merci! :) – JamesBrownIsDead