Шаблонов там дофига, но помоему они все на социалку.
Книги на стороне сервера генерятся. Т
Я понять немогу что ты под решёнными заданиями понимаешь. Синии звёздочки чтоли, дак там два тега , им шаблон не нужен.
Сами данные о заданиях хранятся в объекте windowsbook. Очевидно этот обьект генерировался вместе со страницей. То есть никакого ajax ту то нету, все данные выданы вместе со страницей.
Сам скрипт ответственный за звёздочки расположен в файле по ссылке
http://spishy.ru/js/_all.js?7
вот фрагмент кода.
var Homework = (function() {
// onDocumentReady
$(function() {
if (typeof book === "undefined") return;
Homework.showTasks(book.tasks);
if ($(".homework .tasks").length) {
var selected = [];
var $task = $(".homework .task");
if ($task.length) {
var selected = Homework.getSSelectedTopics(book.topics, $task.data("id")) || [];
}
Homework.addSelect(book.topics, selected);
$(".homework .task").show();
}
});
return {
addSelect: function(topics, selected) {
var $topics = $(".homework .topics");
if (!$topics.length) return;
if (typeof selected === "undefined") selected = [];
var options = [];
$.each(topics, function(id, data) {
var $option = $("<option>").attr("value", id).text(data.name);
options.push($option);
});
if (!options.length) return;
var $select = $("<select>").attr("name", "topic[]").data("topics", topics).change(function(e, selected) {
selected = selected || [];
$(".homework .task").hide();
$(this).nextAll("select").remove();
Homework.removeTasks();
if (selected.length) {
var id = selected.shift();
$(this).val(id);
} else {
var id = $(this).val();
}
if (!id) return;
var topics = $(this).data("topics");
if (!topics[id]) return;
Homework.showTasks(topics[id].tasks);
Homework.addSelect(topics[id].topics, selected);
});
var $option = $("<option>").attr("value", "").text("Выберите...");
$select.append($option);
for (var i in options) {
$select.append(options[i]);
}
$topics.append($select);
$select.trigger("change", [selected]);
},
showTasks: function(tasks) {
var $tasks = $(".homework .tasks");
if (!$tasks.length) return;
this.removeTasks();
var task_id = $(".homework .task").data("id");
var url = $tasks.data("url");
var $ul;
var i = 0;
$.each(tasks, function() {
var id = this.id;
var name = this.name;
if (!$ul) $ul = $("<ul>").addClass("star-blue");
var $a = $("<a>").attr("href", url + id).text(name);
var $li = $("<li>");
if (id == task_id) $li.addClass("selected");
$ul.append($li.append($a));
i++;
if (i >= 10) {
$tasks.append($ul);
$ul = null;
i = 0;
}
});
if ($ul) $tasks.append($ul);
},
removeTasks: function() {
$(".homework .tasks > ul").remove();
},
getSSelectedTopics: function(topics, id) {
for (var topic_id in topics) {
var length = topics[topic_id].tasks.length;
for (var i = 0; i < length; i++) {
if (topics[topic_id].tasks[i].id == id) return [topic_id];
}
var selected = Homework.getSSelectedTopics(topics[topic_id].topics, id);
if (selected) {
selected.unshift(topic_id);
return selected;
}
}
}
}
}());
вместо шаблонизатора как видишь используется вот такая вот нехитрая конструкция, внутри цикла
бла бла бла
//забадяжем ul
if (!$ul) $ul = $("<ul>").addClass("star-blue");
// замутим ссылку
var $a = $("<a>").attr("href", url + id).text(name);
// сморганим li
var $li = $("<li>");
if (id == task_id) $li.addClass("selected");
// впендюрим <li> внутрь <ul>, <а> воткнём внутрь <li>
$ul.append($li.append($a));
Бла бла бла
.....
//Запихиваем это в элемент task что в браузере виден.
if ($ul) $tasks.append($ul);
//И вот оно счастие. Работает даже без шаблонизатора ))))))))
Надеюсь это то что вас интересовало )