Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   способы организации кода (https://javascript.ru/forum/misc/21602-sposoby-organizacii-koda.html)

tenshi 18.09.2011 20:07

смотрикакая няшка: http://nin-jin.github.com/web-compon...-mix/-index.js

x-yuri 22.09.2011 17:06

Цитата:

Сообщение от DjDiablo
Вообще очень мало инфы по архитектуре, подходам к разработки и так далее. Мне кажется было бы всем хорошо, если бы программисты делились подобным опытом. Программирование и написание программы, как ни странно разные вещи. И учиться этому приходится увы отдельно.

вот если бы был пример пусть небольшого проекта, сделанного по этой схеме, а не абстрактное описание...

x-yuri 23.09.2011 04:40

наткнулся только что на цитату: "Вы должны понимать как минимум на один уровень абстракции ниже того уровня, на котором вы кодируете."

melky 23.09.2011 10:51

Цитата:

Сообщение от x-yuri (Сообщение 127739)
"Вы должны понимать как минимум на один уровень абстракции ниже того уровня, на котором вы кодируете."

не понимает мой молодой мозг этого :) объясните, пожалуйста.

x-yuri 23.09.2011 17:09

это значит, что если ты используешь какой-то фреймворк, время от времени ты все равно будешь сталкиваться с проблемами, который этот фремворк не решает или решает, но хреново. Т.е. фрейммворк как бы пытается тебя абстрагировать от нативного js (фреймворк - более высокий уровень абстракции по сравнению с нативным js), но идеально это сделать невозможно. Например, тут можно вспонмить добавление строк/столбцов в таблицу с помощью jquery. Я так это понимаю.

p.s. давай лучше на ты...

melky 23.09.2011 21:03

спасибо, теперь ясно. помнится,как решал проблемы с паузой анимации в jquery

PS. ок :)

poorking 24.09.2011 09:26

melky, Я писал что-то похожее на то, что tenshi показал
/*!	ScriptLoader API. */
	
//	Constructor
function ScriptLoader(){
	
	var interactive = false, 
		queueStack = [];
	
	this.loadScript = function(src, onload, useQueue, specifyParentNode){
	
		var o = new function(){
			
			if(typeof src !== "string"){
				throw new TypeError("ScriptLoader: bad src " + src);
			}
			
			this.src = src;
			
			this.callback = onload || function(){};
			
			this.useQueue = !!useQueue;
			
			this.parentNode = Object(specifyParentNode).nodeType === 1 ? specifyParentNode :
				( document.body || document.getElementsByTagName("HEAD")[0] );
			
		};
		
		var script = document.createElement("SCRIPT");
			script.setAttribute("type", "text/javascript");
			script.setAttribute("src", o.src);
		
		if(!o.queue){
			script.onload = o.callback;
			o.parentNode.appendChild(script);
			return this;
		}
		
		queueStack.push([script, o.callback, o.parentNode]);
		
		if(!interactive){
			
			interactive = true;
			
			;(function load(){
				
				var place = queueStack.shift();
				
				if(place){
					
					place[0].onload = function(event){
						place[1].call(this, event);
						load();
					};
					
					place[2].appendChild(place[0]);
					
				} else{
					interactive = false;
				}
		
			}());
			
		}
		
		return this;
	}
	
}
	
//	lazyMod
ScriptLoader.prototype.multiLoad = function(multiSrc, onload, useQueue, specifyParentNode){
	
	if({}.toString.call(multiSrc) !== "[object Array]"){
		throw new TypeError("ScriptLoader#multiLoad: bad multiSrc " + multiSrc);
	}
	
	for(var i = 0, l = multiSrc.length; i < l; i ++){
		this.loadScript(multiSrc[i], i === l - 1 ? onload : null, useQueue, specifyParentNode);
	}
	
	return this;
}

ScriptLoader.prototype.load = function(src, onload, useQueue, specifyParentNode){
	if(typeof src === "string"){
		return this.loadScript(src, onload, useQueue, specifyParentNode);
	} else if({}.toString.call(src) === "[object Array]"){
		return this.multiLoad(src, onload, useQueue, specifyParentNode);
	} else{
		throw new TypeError("ScriptLoader#load: unknown src type " + src);
	}
}

//	using

var sloader = new ScriptLoader();

sloader.load("http://yandex.st/jquery/1.3.2/jquery.min.js", function(){
	
	
	alert(!!$);

});


Если использовать мультизагрузку, то колбэк вызывается при загрузке последнего скрипта, если useQueue поставить true, то скрипты загружаются по очереди. Колбэк цепляется на onload скрипта, так что если ошибиться в src, то колбэк не вызовется, также если использовать мультизагрузку с useQueue === true, то если один из скриптов не загрузится, то следующие тоже не пойдут. Иногда удобно пользоваться...

aiky 01.10.2011 22:57

Динамическое формирование кода..

var loadJS = function(prm){...}
var myProc = {
  'init':function(){
    ...
  },
  'wizard':{
     'init':function(){
        loadJS({'myProc':'wizard'});
     }
  }
}


myProc_wizard.js:
myProc.wizard = {
  'init':function(){...},
  'show':function(){...},
  ...
}
myProc.wizard.init();


Часовой пояс GMT +3, время: 12:39.