Автор Тема: Как происходит передача данных?  (Прочитано 3768 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Как происходит передача данных?
« : 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() ;
}
...
...
...
<
a href="javascript:getBlock(\'Text\');">Name</a>
...
...
...


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

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

oWindow.insertHtml = insertHtml ;

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

Мы добавляем в объект oWindow эту функцию, или же просто возвращаем данные из родительского окна? но тогда почему не передаем функции insertHtml никаких данных???

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как происходит передача данных?
« Ответ #1 : 08 Сентября 2004, 12:04:06 »
Здесь свойству insertHtml объекта oWindow присваивается ссылка на функцию insertHtml (в случае вызова функции после insertHtml стояли бы скобки). После этого свойство фактически становится методом объекта.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Как происходит передача данных?
« Ответ #2 : 08 Сентября 2004, 12:19:17 »
mike

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

window.opener.insertHtml(bName) ;

В дочернем окне происходит переход по ссылкам (то бишь, страница перегружается), но при этом ссылка на функцию insertHtml остается...
Нашел доку по opener которая говорит, что это окно предшественник, но при этом вне зависимости от количества переходов opener остается изначальным.
Или все таки window.opener - это свойства окна, и не относится к внутреммему html коду и переходам внутри окна?

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как происходит передача данных?
« Ответ #3 : 08 Сентября 2004, 13:27:06 »
opener - это ссылка на родительское окно (из которого было открыто текущее) и внутренние переходы на него не влияют
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Как происходит передача данных?
« Ответ #4 : 08 Сентября 2004, 13:45:41 »
mike

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

oWindow.insertHtml = insertHtml ;

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

Убрал её и тоже работает...

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Как происходит передача данных?
« Ответ #5 : 08 Сентября 2004, 13:56:52 »
Значит, просто лишняя строка. ;) Как вариант, на момент написания посчитали, что объект this в insertHtml будет всегда указывать на родительское окно, но это на самом деле не так. Потом в getBlock window.insertHtml() исправили на window.opener.insertHtml(), а саму инициализацию не убрали. Кода скрипта не видел, поэтому это просто предположение. :)
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Как происходит передача данных?
« Ответ #6 : 08 Сентября 2004, 14:17:20 »
mike

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


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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28