Я написал функцию, которая загружает шаблоны без какой-либо зависимости, но jQuery. Вы должны пометить теги <script>
, которые вы хотите динамически загрузить атрибутом data-template-src
, и поместите туда путь к вашему HTML-файлу. Ниже приведен код и пример.
Внимание: так как он использует AJAX для загрузки шаблонов, он нужен сервер HTTP (он не будет работать локально с file://
протоколом)
/main.js
// Loads all the templates defined with the tag data-template-src.
// Returns a promise that fulfills when all the loads are done.
function loadTemplates() {
var templateLoads = [];
$('[data-template-src]').each(function() {
var templateElement = $(this);
var templateUrl = templateElement.attr('data-template-src');
// Load the template into the element and push the promise to do that into the templateLoads array
templateLoads.push(
$.get(templateUrl)
.done(function (data) {
templateElement.html(data);
})
);
});
return $.when.apply($, templateLoads);
}
// When all templates are loaded, apply bindings
loadTemplates().done(function() {
ko.applyBindings({}, document.getElementById("htmlDoc"));
});
/index.html
<html id="htmlDoc">
<body>
<div data-bind="template: { name: 'exampleTemplate' }"></div>
<script type="text/html" id="exampleTemplate" data-template-src="/assets/exampleTemplate.html"></script>
<script src="/jquery.js"></script>
<script src="/knockout.js"></script>
<script src="/main.js"></script>
</body>
</html>
/assets/exampleTemplate.html
<h1>Hello world</h1>
<div data-bind="template: { name: 'exampleSubTemplate' }"></div>
/assets/exampleSubTemplate.html
<h2>How do you do?</h2>
Благодаря Райан, Так что я должен сделать это в моем HTML: <сценарий SRC = "скрипты/JQuery-1.7.2.js"> < скрипт src = "scripts/jquery-ui-1.8.20.js"> А потом я могу создавать внешние файлы шаблонов. Должен ли я использовать jquery-tmpl или я могу использовать только механизм шаблонов? Знаете ли вы, есть ли (в Fiddle) пример вышеупомянутого метода? – Kessi
Если вы используете версию '_all.js', вам не нужно использовать TrafficCop или инфузор, поскольку они включены. В противном случае, у вас все в порядке. Не уверен, есть ли скрипка, потому что часть AJAX трудно подделать. Однако в репозитории есть пример. –
Вам также не нужно использовать шаблоны jQuery. Вы можете использовать собственные шаблоны. –