Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Phoinix от 07 Сентября 2004, 19:42:22

Название: Как происходит передача данных?
Отправлено: Phoinix от 07 Сентября 2004, 19:42:22
Прикручивая визуальный html редактор к очередной CMS столкнулся с тем, что вообщем не понимаю, что делаю:

Задача такова:
При нажатии на кнопку меню появляется новое окно. В нем выбирается какой-то элемент, окно закрывается. Данные элемента передаются в родительское окно в определенную функцию для вставки в редактируемый html код.

У меня получилась такая функция:

В родительском окне:


function dialogInsertBlock()
{
     var sURL = config.WM4ScriptPath + \'editor/browse_block.pl\' ;
     var oWindow = window.open(sURL, \'\', \'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,titlebar=no,height=400,width=400\') ;
     oWindow.insertHtml = insertHtml ;
}

function insertHtml(html) {
...
...
 

В дочернем окне:

function getBlock(bName)
{
window.opener.insertHtml(bName) ;
window.close() ;
}
...
...
...
Name
...
...
...
 

Все прекрасно работает (IE точно, а совместимость с другими браузерами меня не волнует, т.к. сам редактор пашет только в EI).

Меня смущает строка:

oWindow.insertHtml = insertHtml ;

Никак не могу понять принцип её работы... :(

Мы добавляем в объект oWindow эту функцию, или же просто возвращаем данные из родительского окна? но тогда почему не передаем функции insertHtml никаких данных???
Название: Как происходит передача данных?
Отправлено: mike от 08 Сентября 2004, 12:04:06
Здесь свойству insertHtml объекта oWindow присваивается ссылка на функцию insertHtml (в случае вызова функции после insertHtml стояли бы скобки). После этого свойство фактически становится методом объекта.
Название: Как происходит передача данных?
Отправлено: Phoinix от 08 Сентября 2004, 12:19:17
mike

Спасибо, понял, но тогда еще вопрос:

window.opener.insertHtml(bName) ;

В дочернем окне происходит переход по ссылкам (то бишь, страница перегружается), но при этом ссылка на функцию insertHtml остается...
Нашел доку по opener которая говорит, что это окно предшественник, но при этом вне зависимости от количества переходов opener остается изначальным.
Или все таки window.opener - это свойства окна, и не относится к внутреммему html коду и переходам внутри окна?
Название: Как происходит передача данных?
Отправлено: mike от 08 Сентября 2004, 13:27:06
opener - это ссылка на родительское окно (из которого было открыто текущее) и внутренние переходы на него не влияют
Название: Как происходит передача данных?
Отправлено: Phoinix от 08 Сентября 2004, 13:45:41
mike

Тогда получается

oWindow.insertHtml = insertHtml ;

Лишняя строка? Зачем прицеплать функцию к окну, если мы обращаемся все-равно к родительскому...

Убрал её и тоже работает...
Название: Как происходит передача данных?
Отправлено: mike от 08 Сентября 2004, 13:56:52
Значит, просто лишняя строка. ;) Как вариант, на момент написания посчитали, что объект this в insertHtml будет всегда указывать на родительское окно, но это на самом деле не так. Потом в getBlock window.insertHtml() исправили на window.opener.insertHtml(), а саму инициализацию не убрали. Кода скрипта не видел, поэтому это просто предположение. :)
Название: Как происходит передача данных?
Отправлено: Phoinix от 08 Сентября 2004, 14:17:20
mike

Цитировать
Как вариант, на момент написания посчитали


Нет не посчитали, этот код писал я, методом научно направленного тыка (Java Script никогда не использовал на таком уровне за ненадобностью) и просмотра готовых скриптов... я и вопрос-то задал потому, что сам не понял, что сделал... ;)

Спасибо за разъяснение, по крайней мере с родительскими и дочерними окнами практически разобрался...