2016-07-06 6 views
3

Пользовательские элементы позволяют вам получить доступ к внутреннему HTML-тегу пользовательского тега при его использовании через селектор <content></content> вместе с некоторыми спецификациями, для которых содержимое вставляется в это представление.Селектор доступа к содержимому в классе для настраиваемого элемента

Я хочу, чтобы иметь возможность доступа к этим данным в моем классе без упаковки тега.

Я попытался следующие: <content ref="content"></content> и this.content ссылаться на него после databinding ref attribute стратегии Rob Eisenberg выскажется, но console.log(this.content) урожайности undefined на каждом этапе жизненного цикла элемента.

Обходной путь, который я думал о размещении тега <content> в другом элементе, вытащить текст с помощью jquery, кешировать его и удалить этот элемент через атрибут ref, но это кажется неэлегантным.

Как я могу получить доступ к этим данным в классе es6, связанном с пользовательским элементом?

Пример сценария:

некоторые-view.html

<template> 
    <customelement>Hello World</customelement> 
<template> 

customelement.html

<template> 
    Something, but not a content tag 
</template> 

customelement.js

export class CustomElement { 
    get foobar() { 
     //Somehow ascertain "Hello World" without displaying it in customelement 
    } 
} 

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

+1

будет ли ваш декоратор '@ processContent' работать для вас? http://aurelia.io/hub.html#/doc/article/aurelia/framework/latest/cheat-sheet/9 Не уверен, полностью ли я понимаю ваш сценарий - подумайте над добавлением примера, показывающего предполагаемое использование вашего настраиваемого элемента , –

+0

@JeremyDanyow Глядя на документы, я не уверен, как действовать и как функция процесса будет выглядеть с учетом этих параметров. Я обновил свой вопрос с минимальным примером, надеюсь, это очистит его – David

ответ

4

Мы больше не используем элемент content. Начиная с RC, мы используем элемент slot. При этом элемент slot не поддерживает привязку ref, поскольку элемент слота «исчезает» и заменяется проецируемым контентом. Это связано с тем, что в спецификации Shadow DOM slot s на самом деле не являются элементами, они являются «инструкциями по обработке».

+0

Хорошо, не проблема. Как получить доступ к данным без использования тега контента или слота? Я бы предпочел захватить контент, не изменяя DOM вывода. – David

3

Вот пример, который показывает, что вы можете получить с точки зрения контента на разных этапах жизненного цикла компонентов.

https://gist.run?id=e372bdb91990d08ad49cdf39753cc622 **

app.html

<template> 
    <require from="./my-element"></require> 

    <my-element> 
    <div repeat.for="i of 5">${i}</div> 
    </my-element> 
</template> 

мои-element.html

<template> 
    Hello! 
    <slot></slot> 
</template> 

мои-element.js

import {inject, processContent, noView} from 'aurelia-framework'; 

@inject(Element) 
export class MyElement { 
    constructor(element) { 
    this.element = element; 
    alert('constructed:\n\n' + this.element.innerHTML); 
    } 

    created() { 
    alert('created:\n\n' + this.element.innerHTML); 
    } 

    bind() { 
    alert('bind:\n\n' + this.element.innerHTML); 
    } 

    attached() { 
    alert('attached:\n\n' + this.element.innerHTML); 
    } 
} 
+0

Я протестировал и понял, что мне нужно добавить еще одну точку разъяснения - пользовательский элемент все равно должен обрабатывать и отображать как обычно, мне просто нужно извлечь контент - как вы это делаете - и действовать так, как было бы. – David

+0

обновленный ответ. –

+0

Итак, я думаю, что повторный div усложняет ситуацию. Взгляните на эту суть: https://gist.run/?id=6b24e48255af21f8e93dd7ae12e65162 - Я бы хотел в любой момент извлечь «Whatever» без '' – David