官术网_书友最值得收藏!

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>
Managing templates with jQuery

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.

主站蜘蛛池模板: 获嘉县| 辉县市| 景洪市| 大宁县| 望奎县| 西城区| 宣化县| 玉门市| 山东省| 通道| 新河县| 咸阳市| 屏山县| 平遥县| 黔东| 象山县| 镇坪县| 炎陵县| 漳州市| 巴东县| 怀仁县| 乃东县| 平安县| 黎平县| 同仁县| 辽宁省| 彭水| 休宁县| 海晏县| 石门县| 渝中区| 颍上县| 正定县| 喀什市| 遂溪县| 中超| 香港| 五大连池市| 嘉义市| 延长县| 梅河口市|