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

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.

主站蜘蛛池模板: 金堂县| 林甸县| 临潭县| 汉寿县| 罗平县| 师宗县| 台东市| 临西县| 沁源县| 嘉峪关市| 油尖旺区| 新余市| 渝中区| 柳江县| 嵊州市| 三河市| 彭州市| 新丰县| 新余市| 闽清县| 珠海市| 铅山县| 龙泉市| 黄浦区| 柳林县| 广昌县| 谢通门县| 宁海县| 巴青县| 蒙自县| 琼结县| 肥东县| 太保市| 德钦县| 高邑县| 南平市| 六安市| 湟源县| 崇明县| 靖江市| 尉犁县|