Добавить свойство target для dropdownnode в контейнере виджетов

Я хотел бы добавить свойство target (например, _blank) для basicLeafNode в контейнере виджетов из библиотеки расширений.

Я не вижу для этого свойства.

Вместо этого я мог бы использовать свойство onClick и вернуть URL-адрес. Но тогда у меня все равно не было бы цели.

Я мог бы добавить метод postScript

var target = url;
view.postScript("window.open('"+target+"','_blank')")

но это срабатывает, когда контейнер загружен.

  • Могу ли я добавить целевое свойство без использования свойства onClick?
  • Если я использую свойство onClick, какой метод мне следует использовать или как предотвратить выполнение постскриптума при загрузке контейнера?

person Patrick Kwinten    schedule 20.11.2013    source источник
comment
@ Campl3r Я думаю, что совершенно ясно, что хочет сделать спрашивающий (добавить целевое свойство к ссылке)   -  person Per Henrik Lausten    schedule 20.11.2013
comment
Насколько я знаю, единственным решением было бы создать свой собственный настраиваемый узел, который поддерживает 'target', путем расширения com.ibm.xsp.extlib.tree.complex.ComplexLeafTreeNode, тогда вы можете использовать этот новый узел везде, где можете использовать leafNode, включая DropDownMenue в WidgetContainer.   -  person Michael Saiz    schedule 20.11.2013
comment
Я хочу открыть URL-адрес в новом окне. из раскрывающейся функции в контейнере виджетов   -  person Patrick Kwinten    schedule 20.11.2013


Ответы (3)


BasicLeafNode в настоящее время не предоставляет целевое свойство. У вас есть 2 варианта действий:

  • реализовать свой собственный настраиваемый узел, как предложил Майкл (сложно)
  • используйте класс по ссылке, например. "newpageopen" и добавьте скрипт onPageReady, который выбирает все элементы с помощью calss newpageopen и добавляет целевое свойство в полученный HTML.

Что-то вроде этого:

require(["dojo/ready","dojo/query"], function(ready){
    ready(function(){
        dojo.query("a.newpageopen").attr("target", "_blank");
    });
 });

Надеюсь, это поможет;

person stwissel    schedule 20.11.2013

Чтобы сделать этот список решений немного длиннее, вот еще одно, для которого не требуется dojo или jquery:

Вместо использования вашего кода как SSJS, например:

var target = url;
view.postScript("window.open('"+target+"','_blank')")

Вы можете использовать код на стороне клиента и добавить код SSJS в # {javascript:} ', который, на мой взгляд, является кратчайшим решением этой проблемы. Вот жестко запрограммированный пример:

        <xe:basicLeafNode>
            <xe:this.onClick><![CDATA[window.open('#{javascript: return "http://www.google.com";}','_blank');]]></xe:this.onClick>
        </xe:basicLeafNode>

приведенный выше пример также будет работать с переменными viewScope или функциями SSJS:

        <xe:basicLeafNode>
            <xe:this.onClick><![CDATA[window.open('#{javascript: return viewScope.url;}','_blank');]]></xe:this.onClick>
        </xe:basicLeafNode>
person Michael Saiz    schedule 26.11.2013

Вы можете добавить атрибут target с помощью JavaScript. Это неудобно, но сработает.

Вы можете использовать dojo.query для запроса вывода HTML, созданного basicLeafNode в контейнере виджетов. Как только вы получите узел <a>, вы можете добавить атрибут с помощью dojo.attr.

Одна из проблем, с которой вы можете столкнуться, заключается в том, что идентификатор, сгенерированный XPages, содержит символ :, который не будет работать, поэтому вам нужно будет его избежать.

function escapeColon(controlID) {
    return controlID.replace(/:/g, "\\3A");
}

Итак, ваш код будет примерно таким:

dojo.addOnLoad(function() {
    dojo.attr(dojo.query(escapeColon("#{id:ID_of_basicLeafNode}") + " > a")[0], "target", "_blank");
});

Код escapeColon("#{id:ID_of_basicLeafNode}") + " > a" сгенерирует селектор CSS. Здесь я предполагаю, что basicLeafNode в контейнере виджетов сгенерирует что-то вроде этого <div id="_id1:basicLeafNode"><a href=".... Таким образом, селектор CSS будет искать тег с этим идентификатором и внутри него тег <a>. Вам придется изменить это на основе созданного вывода.

Как я уже сказал, это немного неудобно. Также я не тестировал этот код.

person Naveen    schedule 20.11.2013