Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача параметров в колбэки и дальнейшее их вешанье на события. (https://javascript.ru/forum/misc/20657-peredacha-parametrov-v-kolbehki-i-dalnejjshee-ikh-veshane-na-sobytiya.html)

Gremlin 12.08.2011 22:50

В общем, единственный найденный мной способ передачи параметра в функцию-колбэк вот такой.

Common.areYouSure('Предепреждение',
                                        'Текст вопроса?',
                                        'Удалить ', 'не удалять',
                                        function(){Groups.destroy(id_group)});

Вся соль в этой строчке: если параметром передавать это, то колбэк запускается по наступолению события, что и требовалось.
function(){Groups.destroy(id_group)}


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


У меня все таким образом завелось. Пардон за бурю в стакане )))

Да, вот еще что: пример сделать не могу в рамках этого форума, т.к. запустить можно либо отдельно ХТМЛ, либо отдельно Яваскрипт. А у меня колбэк должен привязываться к событию онКлик на элемент ХТМЛ.

devote 12.08.2011 22:57

areYouSure: function(title, question, okText, cancelText, myCallback, args) {
//.... многа кода
    sureBox.find('#ok').bind('click', function() {
        myCallback.apply( this, args );
    });
// .... еще кода
}

function mycallbackfunc() {
    alert( Array.prototype.slice.call( arguments, 0 ) );
}

Common.areYouSure('blabla', 
                           'blabla blabla', 
                           'Удалить blabla', 'Отмена blabla', 
                           mycallbackfunc, [param1, param2, ... и т.д. ]);

devote 12.08.2011 23:02

Цитата:

Сообщение от Gremlin
запустить можно либо отдельно ХТМЛ

он же и яваскрипт запускает тот что в теге скрипт :)

devote 12.08.2011 23:04

<div>Я просто HTML</div>
<script type="text/javascript">
   alert("А я JavaScript =)");
</script>

Gremlin 13.08.2011 01:00

Блин, точно, можно ))

Gremlin 13.08.2011 02:01

Сделал как в посте 12. Сделал по образу и подобию с 1-й по 7-ю строки и с 13-й по 16-ю. Так тоже работает:thanks: areYouSure стала немножечкого запутанее выглядеть, но зато её вызов стал куда приятнее :) Нагляднее варианта ещё не встречал.

Только вот эта функция взорвала мозг:
function mycallbackfunc() {
    alert( Array.prototype.slice.call( arguments, 0 ) );
}

У нее в скобках не указаны входящие аргументы: получается что при использовании apply входящие аргументы могут не указываться в функции? Они прямо внутрь нее без указания залетают что-ли? :-?

И что эта за конструкция внутри алерта такая убийственная??? :blink:
Насколько я понял (предварительно погугливши), ее задача превратить полученный обьект с параметрами в обычный массив для возможности дальнейшего его вывода. Но вот главная непонятка: что это за параметр такой arguments? Это какая-то зарезервированная входящая переменная(обьект), в которой находятся все переданные call-ом параметры? Думаю что да, но не уверен. Пробовал вставлять эту строку в любую из своих вызываемых функций - она действительно выводит список аргументов.


И следовательно напрашивается новый вопрос: как лучше и правильнее получать аргументы внутри вызываемой функции: через указание аргументов в скобках после слова function, или получать при помощи этого хитрого обьекта arguments, манипуляции над которым проводятся в строке 10?

devote 13.08.2011 06:06

Цитата:

Сообщение от Gremlin
в которой находятся все переданные call-ом параметры? Думаю что да, но не уверен.

Можешь быть уверенным =)
Цитата:

Сообщение от Gremlin
через указание аргументов в скобках после слова function, или получать при помощи этого хитрого обьекта arguments

А это уже от желания зависит )

Gremlin 13.08.2011 07:54

Огромное спасибо за помощь :) Все таки удалось понять друг-друга. Буду писать дальше. :write:


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