Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вызов метода return для функции-родителя (https://javascript.ru/forum/misc/2602-vyzov-metoda-return-dlya-funkcii-roditelya.html)

evgen28 21.01.2009 16:25

вызов метода return для функции-родителя
 
Привет всем!Вопрос такой:
Есть функция
function Ok()
{
...
...
var myQueue = new Request.Queue();
myQueue.onSuccess = function(){
//Здесь при возникновения события надо
//сделать return true,только для функции Ok()
}
...
...
}

внутри нее создается объект myQueue (из mootools). Надо при возникновении события myQueue.onSuccess возвращать return true для функции Ok().
Пробовал разные варианты, более менее подходящий по смыслу из которых
var self=this
myQueue.onSuccess = function(){
with(self){
return true;
}
}
но ничего не помогло.Событие само срабатывает, а в Ok() ничего не возвращается! Помогите кто чем может!Заранее спасибо!

Kolyaj 21.01.2009 16:34

Когда сработает событие onSuccess, return уже случится.

evgen28 21.01.2009 16:48

Не понял Вашего ответа. Когда сработает событие(метод) onSucces объекта myQueue случится выполнение функции
function(){
with(self){
return true;
}
}
по идее в теле функции в данном случае оператор
with должен применить к объекту self блок { return true;} и записать в результат родительской функции function Ok() значение true, но этого не происходит ,и ,видимо, оператор return true срабатывает для метода myQueue.onSuccess. Что делать то надо?

Kolyaj 21.01.2009 17:02

Цитата:

Сообщение от evgen28
Не понял Вашего ответа.

function Ok() {
...
...
  var myQueue = new Request.Queue();
  myQueue.onSuccess = function(){
    // чем выполнится это место
  }
  // Вот это место выполнится раньше
  ...
  ...
}

evgen28 21.01.2009 17:12

Ну это понятно, что onSuccess выполнится позже, но мне надо подождать, пока не выполнится onSucces, а когда он выполнится, вернуть в результат функции значение true. Можно это как-нибудь организовать правильно?Или в цикле по таймауту проверять значение какой-нибудь заранее заданной переменной типа

function Ok() {
...
...
var returner = false;
var myQueue = new Request.Queue();
myQueue.onSuccess = function(){
returner= true; }


...
...
while(!returner){
setTimout('',1000);
}
return true;
}
Правда так вешается сценарий... :(
Есть какие-нибудь предложения?

Kolyaj 21.01.2009 17:56

Цитата:

Сообщение от evgen28
while(!returner){
setTimout('',1000);
}

Ого. Я бы тоже повесился.

Цитата:

Сообщение от evgen28
Есть какие-нибудь предложения?

Почитать про асинхронное программирование. На этом сайте много полезных статей.

x-yuri 21.01.2009 21:41

зачем тебе нужно, чтобы именно Ok получила результат?
расскажи о задаче более высокого уровня
функция Ok - не родительская, она разве что "родительская"

PsychodeliC 22.01.2009 03:33

обалдеть завернул, слушай, x-juri, мы можем иметь общих знакомых по николаескому политеху?

evgen28 22.01.2009 10:06

Короче все понятно!Если не можете ответить на вопрос, то не надо отправлять на форумы и читать литературу-это и без Ваших рекомендаций понятно!Чё за люди?Приходишь с прямым вопросом, а они ходят все вокруг да около, да еще пытаются показать какие они умные!
ГРАЖДАНЕ! ФОРУМЫ ДЛЯ ТОГО И СУЩЕСТВУЮТ, ЧТОБЫ ПОМОЧЬ ДРУГИМ ЛЮДЯМ РАЗОБРАТЬСЯ! А ТЕШИТЕ СВОЕ САМОЛЮБИЕ И ПОКАЗЫВАЙТЕ СВОЮ ГНУСНОСТЬ ПОЖАЛУЙСТА ДОМА!А ТО ЧТО НЕ ФОРУМ, ТО УМНИКИ!СОЦИУМ,БЛИН!!!

evgen28 22.01.2009 10:10

А надо мне это, потому что правлю FCKEditor,добавляю туда дополнительные свойства и события, привяываю к нему mootools и БД. Функция Ok()- это функция закрытия окна настройки элементов FCKEditor. И срабатывать она должна после выполнения очереди запросов. Иначе запросы могут не обновить инфу в БД.

Kolyaj 22.01.2009 10:25

evgen28,
Убей себя. Если бы ты последнее сообщение написал первым, то тебе сразу бы и сказали, че делать. А теперь уж и не знаю, скажет ли кто :)

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

evgen28 22.01.2009 10:27

ИДИ НА ХУЙ!ДЕБИЛ

evgen28 22.01.2009 10:34

А дебилы типа тебя обсирают людей, которы хотят научиться чему то от более умных. И вообще,чувствую, ты гнусный и ущербный человек, который потешает свое самолюбие на таких форумах, а сам из себя ничегошеньки не представляет. К людям надо добрее относиться! Сделай что нибудь хорошее! Гораздо приятнее, когда тебе говорят СПАСИБО, а не когда тебя посылают на 3 буквы. Скажи мне ты уже родился со знанием ООП и javascript?Как ты этому всему учился?Читал книги, ходил в универ, смотрел форумы, статьи и тд. Когда ты учился тебя тоже так посылали и отвечали вопросом на вопрос?

evgen28 22.01.2009 10:37

Почему на иностранных форумах люди пытаються помочь друг другу, а на русских обосрать?

evgen28 22.01.2009 11:17

Кому надо разобрался как это делается для FCKEditor.Делается вызов функции родительского окна в событии OnSuccess. Конечно бы хотелось узнать как это делается через ООП, НО ПОЛУЧИВ НЕДОВОЛЬСТВА ОТ НЕККОТОРЫХ ТОВАРИЩЕЙ ПРИШЛОСЬ СДЕЛАТЬ В ЛОБ.(А ЧЕРЕЗ ООП БЫЛО Б ИНТЕРЕСНЕЕ :)
function Ok()
{


//var returner=false;
oEditor.FCKUndo.SaveUndoStep() ;

oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT',
{id: GetE('txtName').value,
name: GetE('txtName').value,
type: GetE('txtType').value,
value: GetE('txtValue').value } ) ;

//SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;

//óñòàíàâëèâàåì íóæíûå çíà÷åíèÿ äëÿ àòðèáóòîâ
var idElement = GetE('txtName').value;
if (idElement!=''||idElement!=null){
//çàïèñûâàåì ðåçóëüòàò â ÁÄ

//êîëè÷åñòâî ñâîéñòâ ýëåìåíòà - òèïà onclick,onblur, onchange è òä è òï
//var returner = false;
var events = new Array('click');
myQueue = new Request.Queue();
myQueue.onSuccess = function(){
//returner = true;
window.parent.CloseDialog();
//alert(typeof Ok);// return true;
}
var datap,index,j;
j=0;
for(var i=0;i<events.length;i++){
//áåðåì äàííûå äëÿ ñåðâåðà
if($(events[i] + '-server-page-check').get('checked')){
datap = 'hiddenName=' + GetE('txtHiddenName').value +
'&idElement='+idElement+'&task=saveToDatabase&elem ent=button&side=server&idTask=' +
$(events[i] + '-idTask').value + '&idAnswer=' +
$(events[i] + '-idAnswer').value + '&API=' +
$(events[i] + '-serverAPI').value + '&APIParams=' +
$(events[i] + '-APIparamsServer').value +
'&idView=' + GetParam('id') + '&ElementEvent=' + events[i];

//GetE('txtValue').value = datap;

eval("var r" + j + " = new Request({" +
"url : '../fckdialog.ajax.php'," +
"data : '" + datap + "'," +
//"onSuccess : function(responseText, ResponseXML){alert(responseText);}," +
"method : 'post'" +
"});" +
"myQueue.addRequest('r" + j + "', r" + j + ");");
j++;
}
//áåðåì äàííûå äëÿ êëèåíòà
if($(events[i] + '-client-page-check').get('checked')){
datap = 'hiddenName=' + GetE('txtHiddenName').value +
'&idElement='+idElement+'&task=saveToDatabase&elem ent=button&side=client&API=' +
$(events[i] + '-clientAPI').value + '&APIParams=' +
$(events[i] + '-APIparamsClient').value +
'&idView=' + GetParam('id') + '&ElementEvent=' + events[i];

eval("var r" + j + " = new Request({" +
"url : '../fckdialog.ajax.php'," +
"data : '" + datap + "'," +
"method : 'post'" +
"});" +
"myQueue.addRequest('r" + j + "', r" + j + ");");
j++;
}

}


for(var i=0;i<j;i++)eval('r'+i + '.send()');

/*while(!returner){
alert('Èäåò çàïèñü â ÁÄ!');
setTimeout('',1000);
}*/
//return true;
//setTimeout('',10000);
} else
return false ;
}

Gvozd 22.01.2009 14:24

Сколька экспресии!!!
Вах.

Интересно и откуда они такие нервные берутся?)

x-yuri 22.01.2009 15:09

Цитата:

обалдеть завернул, слушай, x-juri, мы можем иметь общих знакомых по николаескому политеху?
вряд ли, я в Николаеве не был)

Цитата:

ФОРУМЫ ДЛЯ ТОГО И СУЩЕСТВУЮТ, ЧТОБЫ ПОМОЧЬ ДРУГИМ ЛЮДЯМ РАЗОБРАТЬСЯ!
http://phpclub.ru/faq/WhyForum?v=b56

Цитата:

Конечно бы хотелось узнать как это делается через ООП
если ты имеешь в виду, что написал функцию, а не класс, то ничего в этом плохого нет. Я не вижу, зачем тебе здесь класс.
Кроме того, обычно либо программа написана в соответствии с принципами ООП, либо нет

Kolyaj 22.01.2009 15:46

Цитата:

Сообщение от x-yuri
http://phpclub.ru/faq/WhyForum?v=b56

В мемориз.


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