Показать сообщение отдельно
  #109 (permalink)  
Старый 19.04.2011, 00:40
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Ещё кое-что надумал, пока пытался заснуть вчера... Асинхронность. Например (из прошлого html-кода):
ну асинхронность она определенно усложняет. Просто пока ее немного, это не мешает. А потом начинаешь изобретать цепочки вызовов, т.е. прячешь эту асинхронность. На github'е видел не одну библиотеку, в которой это есть. Например, можно так реализовать, через рекурсию, для небольших цепочек, на mootools:

var AsyncChain = new Class({
	Implements: [Events, Options],
	
	_chain: [],
	_state: {},
	
	initialize: function( options ){
		this.setOptions( options );
	},
	
	add: function( f ){
		this._chain.push( f );
		return this;
	},
	
	run: function(){
		run.of(this)(0);
		return this;
		
		function run( i ){
			var f = this._chain[i];
			if( ! f )
				return;
			f.of(this)( run.of(this).pass(i+1) );
		}
	},
    
	clear: function(){
		this._chain = [];
		return this;
	},
	
	set: function( options ){
		$extend( this._state, options );
		return this;
	}
});


пример использования:
var chain = new AsyncChain();
        chain.setOptions({
                'onFailure': onFailure.of(this).pass(chain),
                'onCancel': onCancel.of(this).pass(chain)
        })
             .set( options )
             .add( this._disableLink )
             .add( this._setPhotoUrl )
             .add( this._setPhotoDownloadUrl )
             .add( this._showThrobber )
             .add( photosession.getThumbnailPath )
             .add( photosession.setPhotoUploadUrl )
             .add( photosession.loadPhoto )
             .add( photosession.loadCropResize )
             .add( this._hideThrobber )
             .add( this._showDialog )
             .add( photosession.cropResize )
             .add( photosession.setThumbnailFormField )
             .add( this._loadThumbnail )
             .add( this._showThumbnail )
             .add( this._closeDialog )
             .add( this._enableLink )
             .run();
Ответить с цитированием