2016-06-25 2 views
0

Я очень новичок в AEM и чистом интерфейсе (html, css, js), поэтому приношу извинения за задание такого основного вопроса. Я создал 2 родительских и дочерних компонента. Каждый из этих компонентов имеет свойство имени, которое я установил в диалоговом окне. Мне нужно иметь доступ к имени имени родителей в дочернем компоненте, моя страница выглядит так.AEM - Получить свойство родительского компонента dilalog внутри диалогового окна дочернего компонента

родительский компонент
--parentParsys
---- Детский компонентные
------ childParsys

Мне просто нужно, чтобы отобразить имя родителей в Чайлдс диалоге, но я не могу чтобы найти имя родителей.

Любое руководство будет высоко оценено. В идеале я хотел бы сделать это в JS, но мне комфортно подходит мой JSP.

Благодаря

+0

У вас есть два разных вопроса. Вы хотите отобразить имя родителя в диалоговом окне дочернего элемента? Это будет использовать JavaScript. Или вы хотите отобразить имя родителя в отображаемом HTML? Это будет использовать JSP. – nateyolles

ответ

2

Присоединить слушателя к диалогу вашего ребенка компонента так, что он будет работать ваш JavaScript, когда диалог нагрузки. Этот JavaScript определит путь родительского компонента на основе пути дочернего компонента. Используя RESTful характер Apache Sling, вы просто сделаете запрос GET ресурсу родительского компонента, который вернет вам свойства этого ресурса. Затем вы можете обновить текущее открытое диалоговое окно со значением, которое вы хотите. Вся необходимая информация предоставляется в CQ Widgets API documentation.

Присоединить слушатель диалогового ребенка, указывая на внешний JavaScript файл:

<instructions 
    jcr:primaryType="cq:Widget" 
    fieldLabel="Instructions" 
    xtype="displayfield"> 
    <listeners 
     jcr:primaryType="nt:unstructured" 
     loadcontent="function(field, record, path){ mynamespace.updateWithParentName(field, record, path) }" 
    /> 
</instructions> 

Добавить пользовательский JavaScript в ClientLib доступен в режиме разработки. Это может быть cq.authoring.editor, см. Using Client-Side Libraries. Это будет запускаться каждый раз при открытии диалога. В этом примере выполняется синхронный запрос GET и обновляется displayfield. Вы будете обновлять его в зависимости от того, что вы хотите с данными, как вы хотите найти родительский компонент, и вы также захотите добавить нулевые проверки.

var mynamespace = {}; 

mynamespace.updateWithParentName = function(field, record, path) { 
    var parentPath = getParentPath(path); 
    var parentComponent = CQ.shared.HTTP.eval(CQ.shared.HTTP.noCaching(parentPath + '.json')); 
    var parentName = parentComponent.name; // assuming the property name is "name" 

    field.setValue('Parent component name is: ' + parentName); 

    /* Go up two levels accounting for the current component and the parsys */ 
    function getParentPath(path) { 
    var parts = path.split('/'); 
    var parentPath = parts.slice(0, parts.length - 2).join('/'); 

    return parentPath; 
    } 
} 
+0

Это замечательно, спасибо. – John76

+0

@ John76 Я рад, что смог помочь. Если вы нашли ответ полезным, пожалуйста, подумайте над тем, чтобы ответить и отметить ответ как правильный. – nateyolles