Показать сообщение отдельно
  #4 (permalink)  
Старый 14.01.2012, 18:46
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Шаблонов там дофига, но помоему они все на социалку.
Книги на стороне сервера генерятся. Т
Я понять немогу что ты под решёнными заданиями понимаешь. Синии звёздочки чтоли, дак там два тега , им шаблон не нужен.

Сами данные о заданиях хранятся в объекте 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);
		
           //И вот оно счастие. Работает даже без шаблонизатора ))))))))


Надеюсь это то что вас интересовало )
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.01.2012 в 19:23.
Ответить с цитированием