Показать сообщение отдельно
  #7 (permalink)  
Старый 29.10.2011, 13:52
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Да, правильно.
Цитата:
По-сути, можно заменить массивом независимых Deferred
да можно.

Смысл/польза в том, что свой велосипед юзаю в риа. и там случаев, где надо делать массив больше, нежели где надо простой диферд.

Код писал под пример(тоесть сначала написал пример, а потом код для реализации).
Тут могут быть эм-ты фреймворка если что.

var d = _.deferred();

// ##### --- stages actions

d.stage('animation').done(function() {
		console.log('animation finished');
	}).fail(function() {
		console.log('animation failed');
	});

d.stage('ajax').done(function() {
		console.log('ajax done');
	}).fail(function() {
		console.log('ajax fail');
	});

d.stage('button');

// ##### --- actions

_.post('some/url.php').succes(function(data) {
	d.resolve('ajax', data);
}).err(function(err) {
	d.reject('ajax', err);
});

_('.menu').hide(200, function() {
	if(this.length) {
		d.resolve('animation');
	}
	else {
		d.reject('animation');
	}
});

_('.button-forward').click(function() {
	d.resolve('button');
});
_('.button-back').click(function() {
	d.reject('button');
});

// ##### --- defered finally

d.success(function() {
	console.log('chain success');
}).anyway(function() {
	console.log('chain done');
}).err(function() {
	console.log('chain with err');
});


Вот. Я было попробовал это переписать короче - не получилось...
Ещё из плюсов:
не засирается область лишними переменными.

+я изначально диферд сделал простым. тоесть все свойства создаются в момент навешивания обработчиков.
так что можно не париться что колбасу режем скальпелем.

Последний раз редактировалось float, 29.10.2011 в 14:02.
Ответить с цитированием