plone4: открыть оверлей с содержимым ajax без привязки к клику

$('.selector').prepOverlay() from plone.app.jquerytools отлично работает при привязке всплывающего окна к 'onClick' и загрузке его содержимого с URL-адреса, предоставленного одним из атрибутов href/src/rel.

<a class=".selector" href="link/to/@@view">link</a>

у меня есть вариант использования, когда я загружаю свой контент через ajax вручную, проверяю его на определенные условия, и если они выполняются, я хочу показать контент, возвращаемый запросом ajax, в оверлее:

jQuery.ajax({
    type: 'GET',
    url: portal_url + '/@@my-popup',
    success: function(r) {
        if (r != '') {

            // show Overlay

        }
    }
});

что я сейчас делаю, чтобы показать наложение:

создайте элемент ссылки, привяжите к нему оверлей и откройте его

var link = $('<a href="' + portal_url + '/@@my-popup"></a>')

link.prepOverlay({
    subtype:'ajax',
});
link.click();

однако это приводит к двум запросам на '/@@my-popup'

есть ли более приятный способ получить произвольный контент в оверлеях, созданных с помощью prepOverlay?


person fRiSi    schedule 17.11.2016    source источник


Ответы (2)


Нет, к сожалению, нет.

Если вы посмотрите ближе к функции prepOverlay, вы увидите следующую строку:

// be promiscuous, pick up the url from
// href, src or action attributes
src = o.attr('href') || o.attr('src') || o.attr('action');

Это означает, что вы не можете активировать оверлей, не имея элемента с атрибутом href, src или action.

Вы можете написать свой собственный метод prepOverlay, который не перебирает некоторые элементы, а принимает конкретный URL-адрес в качестве параметра.

person Mathias    schedule 17.11.2016
comment
спасибо за ваш ответ матиас. это тоже будет верный вариант. на самом деле - это может быть лучше, чем прямое использование наложения jquertools, потому что я получаю тот же внешний вид для своих всплывающих окон, и я могу повторно использовать обработчики событий, которые я использую для других всплывающих окон) - person fRiSi; 22.11.2016

Единственная реальная цель prepOverlay Plone — автоматизировать преобразование ссылок или изображений в простые оверлеи jquerytools. В вашем случае это только мешает. Поэтому не используйте prepOverlay. Просто напрямую используйте возможность наложения jquerytools.

person SteveM    schedule 17.11.2016
comment
это то, чему я тоже научился, Стив. однако для его прямого использования потребовалось скопировать довольно много кода из prepOverlay, чтобы получить ту же разметку для всплывающих окон. - person fRiSi; 22.11.2016
comment
.. и сделать его совместимым с пользовательскими событиями, которые я зарегистрировал для всплывающих окон prepoverlay. (метод pbo.create_content_div нельзя использовать вне overlayhelper.js) - person fRiSi; 22.11.2016