Hulpmiddelen voor on-object - helper voor subselectie (preview)
Het HTMLSubSelectionHelper
biedt een eenvoudige manier voor uw aangepaste Power BI-visual om subselecties naar Power BI te verzenden, overzichten op te halen en weer te geven.
HTMLSubSelectionHelper
is een helperklasse die is bedoeld om het maken en daaropvolgende beheer van subselectieoverzichten te vergemakkelijken. Het bevat methoden voor het vinden van subselectiebare elementen.
Met de hulpprogramma's worden CSS-klassen en -kenmerken geëxporteerd, zodat de visual eenvoudiger subselecties kan definiëren en onderhouden.
Notitie
Gebruik versie 6.0.1 of hoger van de hulpprogramma's.
Als u subselectiebare elementen wilt definiëren, moeten we ook een klasse toevoegen aan elk gewenst element.
CSS-klasse | Doel | Vereist |
---|---|---|
subselectiebaar | Biedt een selector voor het HTMLSubSelectionHelper vinden van mogelijke subselecties |
ja |
Als u subselecties voor de visual wilt definiëren, zijn er enkele kenmerken die moeten worden toegevoegd aan de gewenste elementen.
Kenmerknaam | Kenmerk | Doel | Vereist | Type | Opmerking |
---|---|---|---|---|---|
SubSelectableDisplayNameAttribute | data-sub-selection-display-name | Geef een gelokaliseerde tekenreeks op voor de weergavenaam van het subselected-element | ja | tekenreeks | data-sub-selection-display-name="Visual Title" |
SubSelectableObjectNameAttribute | data-sub-selection-object-name | Geef een objectnaam op die moet worden gekoppeld aan snelkoppelingen en stijl voor subselectie | ja | tekenreeks | data-sub-selection-object-name="title" |
SubSelectableTypeAttribute | gegevens-subselectietype | Geef het type van de geselecteerde stijl op | ja | SubSelectionStylesType | data-sub-selection-type="1" |
SubSelectableDirectEdit | data-sub-selection-direct-edit | Directe tekstbewerkingsverwijzingen opgeven, waaronder de CardUID, GroupUID en de afdrukstand van het tekstvak | nee | SubSelectableDirectEdit moet worden opgegeven als een tekenreeks | data-sub-selection-direct-edit="{"reference":{"cardUid":"Visual-title","groupUid":"title-text","sliceUid":"title-text-text"},"style":0}" |
SubSelectableHideOutlineAttribute | data-sub-selection-hide-outline | Geef een Booleaanse waarde op voor subselectiebare elementen waarvoor geen overzicht mag worden weergegeven | nee | boolean | data-sub-selection-hide-outline="true" |
SubSelectableRestrictingElementAttribute | data-sub-selection-restricting-element | Wordt gebruikt om het element aan te geven dat wordt beperkt, de contouren en het type beperking (klem of klem) | nee | SubSelectionOutlineRestrictionType | data-sub-selection-restricting-element="1" |
SubSelectableSubSelectedAttribute | gegevens-subselectie-sub geselecteerd | Aangeven of het subselectiebaar is geselecteerd of niet | Nee, de helper wijst deze indien nodig toe aan de elementen | Booleaanse waarde | data-subselection-sub-selected="true" |
Opmaakmodus
Wanneer de visual de indelingsmodus opent, moet u interactiviteit voor de visual uitschakelen, zoals we verwachten dat de gebruiker het visuele element en het visuele element selecteert om opmaak te initiëren.
Openbare methoden van HTMLSubSelectionHelper
De HTMLSubSelectionHelper
bevat enkele openbare methoden die u kunt gebruiken, maar er zijn twee hoofdmethoden en de helper doet de rest.
De twee methoden zijn setFormatMode
en updateOutlinesFromSubSelections
.
De openbare methoden van de helper zijn onder andere:
createHtmlSubselectionHelper(args: HtmlSubselectionHelperArgs): HtmlSubSelectionHelper - Dit is een statische methode die args van het type
HtmlSubselectionHelperArgs
gebruikt en een exemplaar retourneert vanHTMLSubSelectionHelper
.setFormatMode(isFormatMode: booleaanse waarde): void - Met deze methode wordt de indelingsmodus voor de HTMLSubSelectionHelper ingesteld, als isFormatMode waar is, koppelt de helper relevante gebeurtenislisteners aan het hostelement om de functionaliteit van de indelingsmodus in te schakelen (subselectie, overzichten weergeven).
getSubSelectionSourceFromEvent(gebeurtenis: PointerEvent): HtmlSubSelectionSource of niet gedefinieerd - retourneert een
HtmlSubSelectionSource
object dat is gebouwd op basis van de gebeurtenisparameter.onVisualScroll(): void - Geeft aan de HTMLSubSelectionHelper aan dat er momenteel scrollen plaatsvindt. Schuiven moet overzichten verwijderen totdat schuiven is voltooid.
updateElementOutlines(elementen: HTMLElement[], zichtbaarheid: SubSelectionOutlineVisibility, suppressRender: boolean = false): SubSelectionRegionOutlineId[] - werk de overzichten bij (en verzendt deze naar Power BI om te worden weergegeven) van de elementen.
clearHoveredOutline(): void - Met deze methode worden zwevende overzichten gewist als deze bestaan.
updateRegionOutlines(regionOutlines: HelperSubSelectionRegionOutline[], suppressRender: boolean = false): void - update and emits the given outlines to get rendered.
getElementsFromSubSelections(subSelections: CustomVisualSubSelection[]): HTMLElement[] - gegeven subSelections, deze methode retourneert de relevante HTMLElements.
updateOutlinesFromSubSelections(subSelections: CustomVisualSubSelection[], clearExistingOutlines?: boolean, suppressRender?: boolean): void - updates en geeft de overzichten weer voor de opgegeven subSelectie met betrekking tot suppressRender en clearExistingOutlines.
hideAllOutlines(suppressRender: boolean = false): void - hide all the outlines with to suppressRender.
getAllSubSelectables(filterType?: SubSelectionStylesType): CustomVisualSubSelection[] - retourneert alle subSelectables volgens het filterType.
createVisualSubSelectionForSingleObject(createVisualSubSelectionArgs: CreateVisualSubSelectionFromObjectArgs): CustomVisualSubSelection - create CustomVisualSubSelection object from the createVisualSubSelectionArgs.
setDataForElement(el: HTMLElement | SVGElement, data: SubSelectionElementData): void - een statische methode waarmee gegevens voor de elementen worden ingesteld.
getDataForElement(el: HTMLElement | SVGElement): SubSelectionElementData- een statische methode waarmee de eerder toegewezen methode wordt opgehaald met behulp van setDataForElement.
HtmlSubselectionHelperArgs
interface HtmlSubselectionHelperArgs {
/** Element which contains the items that can be sub-selected */
hostElement: HTMLElement; // The host element, the helper will attach the listeners to this element
subSelectionService: powerbi.extensibility.IVisualSubSelectionService;// subSelectionService which is provided in powerbi-visuals-api
selectionIdCallback?: ((e: HTMLElement) => ISelectionId);// a callback that gets the selectionId for the specific element
customOutlineCallback?: ((subSelection: CustomVisualSubSelection) => SubSelectionRegionOutlineFragment[]);// a callback to get custom outline for the specific subSelection
customElementCallback?: ((subSelection: CustomVisualSubSelection) => HTMLElement[]);
subSelectionMetadataCallback?: ((subSelectionElement: HTMLElement) => unknown);// a callback to attatch any meta data to the subSelection.
}
SubSelectionStylesType
const enum SubSelectionStylesType {
None = 0,
Text = 1,
NumericText = 2,
Shape = 3,
}
SubSelectableDirectEdit
interface SubSelectableDirectEdit {
reference: SliceFormattingModelReference;
style: SubSelectableDirectEditStyle;
displayValue?: string;
}
SubSelectionOutlineRestrictionType
const enum SubSelectionOutlineRestrictionType {
/**
* A clamping element will adjust the outline to prevent it from extending beyond
* the restricting element.
*/
Clamp,
/**
* A clipping element will make parts of the outline not visible if the outline extends beyond the
* restricting element's bounds.
*/
Clip
}
Als u beperkingsopties wilt toevoegen aan een specifiek element, gebruikt HTMLSubSelectionHelper
setDataForElement
de helper de gegevens om de overzichten bij te werken:
interface SubSelectionElementData {
outlineRestrictionOptions?: SubSelectionOutlineRestrictionOptions;
}
/** Options used to indicate if a restricting element should allow outlines more space to
* generate by adding padding or if the restricting element should constrict the outline more
* by adding a margin.
*/
export interface SubSelectionOutlineRestrictionOptions {
padding?: IOffset;
margin?: IOffset;
}
Opmerking
In dit voorbeeld implementeren customOutlineCallback
en selectionIdCallback
: De volgende code bevindt zich in Visual Code.
We hebben een object in de visual met de naam arcElement
. We willen het overzicht weergeven wanneer het element wordt aanwijzer of subselected.
import ISelectionId = powerbi.visuals.ISelectionId;
const enum BarChartObjectNames {
ArcElement = 'arcElement',
ColorSelector = 'colorSelector',
…..
}
private ArcOutlines(subSelection: CustomVisualSubSelection): powerbi.visuals.SubSelectionRegionOutlineFragment[] {
const outlines: powerbi.visuals.SubSelectionRegionOutlineFragment[] = []
if (subSelection?.customVisualObjects[0].objectName === BarChartObjectNames.ArcElement) {
const outline: powerbi.visuals.ArcSubSelectionOutline = {
type: powerbi.visuals.SubSelectionOutlineType.Arc,
center: { x: this.arcCenterX, y: this.arcCenterY },
startAngle: this.arcStartAngle,
endAngle: this.arcEndAngle,
innerRadius: this.arcInnerRadius,
outerRadius: this.arcOuterRadius
};
outlines.push({
id: BarChartObjectNames.ArcElement,
outline
});
return outlines;
}
}
public selectionIdCallback(e: Element): ISelectionId {
const elementType: string = d3.select(e).attr(SubSelectableObjectNameAttribute);
switch (elementType) {
case BarChartObjectNames.ColorSelector:
const datum = d3.select<Element, BarChartDataPoint>(e).datum();
return datum.selectionId;
default:
return undefined;
}
}
Importeer de HtmlSubSelectionHelper:
import { HtmlSubSelectionHelper } from 'powerbi-visuals-utils-onobjectutils';
Maak in de constructorcode de HTMLSubSelectionHelper:
constructor(options: VisualConstructorOptions) {
…….
this.subSelectionHelper = HtmlSubSelectionHelper.createHtmlSubselectionHelper({
hostElement: options.element,
subSelectionService: options.host.subSelectionService,
selectionIdCallback: (e) => this.selectionIdCallback(e),
customOutlineCallback: (e) => this.ArcOutlines(e),
});
….
}
Voeg in de updatemethode van de visual de volgende code toe om de overzichten van de subSeselection bij te werken, de status van de indelingsmodus bij te werken voor de HTMLSubSelectionHelper
en schakel interacties uit die niet voor de indelingsmodus gelden als de indelingsmodus is ingeschakeld:
public update(options: VisualUpdateOptions) {
…
if (this.formatMode) {// disabling interaction with the visual data in format mode
barSelectionMerged.on('click', null);
this.svg.on('click', null);
this.svg.on('contextmenu', null);
} else {
this.handleBarClick(barSelectionMerged);
this.handleClick(barSelectionMerged);
this.handleContextMenu();
}
this.subSelectionHelper.setFormatMode(options.formatMode);
const shouldUpdateSubSelection = options.type & powerbi.VisualUpdateType.Data
|| options.type & powerbi.VisualUpdateType.Resize
|| options.type & powerbi.VisualUpdateType.FormattingSubSelectionChange;
if (this.formatMode && shouldUpdateSubSelection) {
this.subSelectionHelper.updateOutlinesFromSubSelections(options.subSelections, true);
}
…
}