Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2011, 22:46
Интересующийся
Отправить личное сообщение для wwwboy Посмотреть профиль Найти все сообщения от wwwboy
 
Регистрация: 12.10.2010
Сообщений: 22

Как передать данные из первого deferred.done в последующие
Как передать данные вниз по цепочке вызовов deferred без использования глобальных переменных?

function doSomthing() {
  var ajx = $.ajax(.....);
  ajx.done(function{
    var data = calcAndTransformSomeData();
  });
  return ajx;
};

var job = doSomthing().done((){
  //тут мне необходимо получить data полученный в ajx.done в doSomthing
  var data = ....
});
Ответить с цитированием
  #2 (permalink)  
Старый 12.12.2011, 23:56
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

до конца по этому куску я не в ехал в смысл.
но из того что понял могу предложить следующее.

1) doSomthing - можно бы разместить в замыкании,
в этом же замыкании вы могли бы хранить любую нужную вам информацию.

А вообще у вас адовый код, сто пудово можно проще )))

2) Можно по копать ещё в этом направлении.
Код в качестве примера идеи. Не уверен что он на 100% рабочий, но суть задумки думаю поймёте.

function doSomthing() {
  var ajx = $.ajax(.....);

  // прототип пользовательского обработчика
  ajx.edr=function(d){};
  // метод устанавливающий пользовательский обработчик
  ajx.dataReady=function(f){
    ajx.edr=f;
  }

  // обработчик ajax (если я правильно понял :) )
  ajx.done(function{
     var data = calcAndTransformSomeData();
     // вызываем пользовательский обработчик
     ajx.edr(data);   
  });
  return ajx;
};

var job = doSomthing().dataReady( function(data){
  //здесь data нам передадут в качестве параметра, и с его получением заворачиваться не надо.
  // кроме прочего, метод в dataReady гарантированно будет вызван после calcAndTransformSomeData, а не до него. Что упрощает жизнь !!
  alert(data);
  console.log(data);
});
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 13.12.2011 в 00:20.
Ответить с цитированием
  #3 (permalink)  
Старый 13.12.2011, 00:19
Интересующийся
Отправить личное сообщение для wwwboy Посмотреть профиль Найти все сообщения от wwwboy
 
Регистрация: 12.10.2010
Сообщений: 22

Ну тут ничего адского - обыкновенные deferred объекты, просто их нужно уметь правильно готовить )))
проблема частично решается присваивание this свойства - оно появится в 3м параметре, либо самому deferred объекту, но к сожалению элегантного метода пока не нашел (
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как взятые данные с цикла присоединить к одной переменной ? saturn Элементы интерфейса 2 25.11.2011 13:01
Как в dojox.grid.DataGrid отобразить данные из array? aristov Dojo toolkit 1 12.11.2011 16:38
Как подгрузить данные с чужого домена, XSS-proof? Actine AJAX и COMET 6 03.09.2011 22:08
как сделать выпадающий список, чтобы второй зависил от значения первого???? zsaz jQuery 2 16.07.2010 20:12
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11