- KnockoutJS Essentials
- Jorge Ferrando
- 218字
- 2021-07-23 20:16:17
Managing templates with jQuery
Since we want to load templates from different files, let's move all our templates to a folder called views
and make one file per template. Each file will have the same name the template has as an ID. So if the template has the ID, cart-item
, the file should be called cart-item.html
and will contain the full cart-item
template:
<script type="text/html" id="cart-item"></script>

The views folder with all templates
Now in the viewmodel.js
file, remove the last line (ko.applyBindings(vm)
) and add this code:
var templates = [
'header',
'catalog',
'cart',
'cart-item',
'cart-widget',
'order',
'add-to-catalog-modal',
'finish-order-modal'
];
var busy = templates.length;
templates.forEach(function(tpl){
"use strict";
$.get('views/'+ tpl + '.html').then(function(data){
$('body').append(data);
busy--;
if (!busy) {
ko.applyBindings(vm);
}
});
});
This code gets all the templates we need and appends them to the body. Once all the templates are loaded, we call the applyBindings
method. We should do it this way because we are loading templates asynchronously and we need to make sure that we bind our view-model when all templates are loaded.
This is good enough to make our code more maintainable and readable, but is still problematic if we need to handle lots of templates. Further more, if we have nested folders, it becomes a headache listing all our templates in one array. There should be a better approach.