Narzędzia obiektu lokalnego — pomocnik podwybierz (wersja zapoznawcza)
Zapewnia HTMLSubSelectionHelper
łatwy sposób na wizualizację niestandardową usługi Power BI w celu emitowania wyborów podrzędnych do usługi Power BI, pobierania i renderowania konspektów.
HTMLSubSelectionHelper
jest klasą pomocnika przeznaczoną do ułatwienia tworzenia i późniejszego zarządzania konspektami podwybierz. Zawiera metody znajdowania elementów do wyboru podrzędnego.
Narzędzia eksportują klasy CSS i atrybuty, co ułatwia wizualizacji definiowanie i konserwację wyborów podrzędnych.
Uwaga
Użyj wersji 6.0.1 lub nowszej narzędzia.
Aby zdefiniować elementy do wyboru podrzędnego, musimy również dodać klasę do każdego żądanego elementu.
Klasa CSS | Purpose | Wymagania |
---|---|---|
podwybierz | Udostępnia selektor do znalezienia HTMLSubSelectionHelper możliwych wyborów do podsieci |
tak |
Aby zdefiniować wybory podrzędne dla wizualizacji, istnieje kilka atrybutów, które należy dodać do żądanych elementów.
Nazwa atrybutu | Atrybut | Purpose | Wymagania | Typ | Przykład |
---|---|---|---|---|---|
SubSelectableDisplayNameAttribute | data-sub-selection-display-name | Podaj zlokalizowany ciąg dla nazwy wyświetlanej podselekcjonowanego elementu | tak | string | data-sub-selection-display-name="Tytuł wizualizacji" |
SubSelectableObjectNameAttribute | data-sub-selection-object-name | Podaj nazwę obiektu do skojarzenia ze skrótami wyboru podrzędnego i stylem | tak | string | data-sub-selection-object-name="title" |
SubSelectableTypeAttribute | typ wyboru podrzędnego danych | Podaj typ wybranego stylu | tak | SubSelectionStylesType | data-sub-selection-type="1" |
SubSelectableDirectEdit | data-sub-selection-direct-edit | Podaj odwołania do edycji tekstu bezpośredniego, w tym CardUID, GroupUID i orientację pola tekstowego | nie | Element SubSelectableDirectEdit powinien być podany jako ciąg | data-sub-selection-direct-edit="{"reference":{"cardUid":"Visual-title","groupUid":"title-text","sliceUid":"title-text"},"style":0}" |
SubSelectableHideOutlineAttribute | konspekt wyboru podrzędnego danych | Podaj wartość logiczną dla elementów, które nie powinny zawierać konspektu | nie | boolean | data-sub-selection-hide-outline="true" |
SubSelectableRestrictingElementAttribute | data-sub-selection-restricting-element | Służy do wskazywania elementu, który będzie ograniczony, kontury i typ ograniczenia (zacisk lub klip) | nie | SubSelectionOutlineRestrictionType | data-sub-selection-restricting-element="1" |
SubSelectableSubSelectedAttribute | wybór podrzędny danych | Wskazuje, czy zaznaczono podwybór | Nie, pomocnik przypisuje go do elementów w razie potrzeby | Wartość logiczna | data-subselection-sub-selected="true" |
Tryb formatowania
Gdy wizualizacja przechodzi w tryb formatowania, musisz wyłączyć interakcyjność dla wizualizacji, ponieważ oczekujemy, że użytkownik wybierze wizualizację i element wizualizacji w celu zainicjowania formatowania.
Metody publiczne HTMLSubSelectionHelper
Zawiera HTMLSubSelectionHelper
kilka metod publicznych, których można użyć, ale istnieją dwie główne metody, a pomocnik wykonuje resztę.
Dwie metody to setFormatMode
i updateOutlinesFromSubSelections
.
Publiczne metody pomocnika obejmują:
createHtmlSubselectionHelper(args: HtmlSubselectionHelperArgs): HtmlSubSelectionHelper — jest to statyczna metoda, która przyjmuje args typu
HtmlSubselectionHelperArgs
i zwraca wystąpienie klasyHTMLSubSelectionHelper
.setFormatMode(isFormatMode: wartość logiczna): void — ta metoda ustawia tryb formatowania htmlSubSelectionHelper, Jeśli isFormatMode ma wartość true, pomocnik dołącza odpowiednie odbiorniki zdarzeń do elementu hosta w celu włączenia funkcji trybu formatowania (podwybór, renderowanie konspektów).
getSubSelectionSourceFromEvent(zdarzenie: PointerEvent): HtmlSubSelectionSource lub undefined — zwraca
HtmlSubSelectionSource
obiekt zbudowany zgodnie z parametrem zdarzenia.onVisualScroll(): void — wskazuje na element HTMLSubSelectionHelper, który trwa przewijanie. Przewijanie powinno usuwać kontury do momentu zakończenia przewijania.
updateElementOutlines(elementy: HTMLElement[], widoczność: SubSelectionOutlineVisibility, suppressRender: boolean = false): SubSelectionRegionOutlineId[] — zaktualizuj konspekty (i emituje je do usługi Power BI do renderowania) elementów.
clearHoveredOutline(): void — ta metoda czyści zatrzymane kontury, jeśli istnieją.
updateRegionOutlines(regionOutlines: HelperSubSelectionRegionOutline[], suppressRender: boolean = false): void — aktualizacja i emituje podane konspekty w celu renderowania.
getElementsFromSubSelections(wybory podsieci: CustomVisualSubSelection[]): HTMLElement[] — biorąc podsieci, ta metoda zwraca odpowiednie elementy HTMLElements.
updateOutlinesFromSubSelections(wybory podrzędne: CustomVisualSubSelection[], clearExistingOutlines?: wartość logiczna, suppressRender?: wartość logiczna): void — aktualizuje i renderuje konspekty dla danego podwybornika w odniesieniu do elementu suppressRender i clearExistingOutlines.
hideAllOutlines(suppressRender: boolean = false): void — ukrywa wszystkie kontury w odniesieniu do elementu suppressRender.
getAllSubSelectables(filterType?: SubSelectionStylesType): CustomVisualSubSelection[] — zwraca wszystkie podwybierzables zgodnie z filterType.
createVisualSubSelectionForSingleObject(createVisualSubSelectionArgs: CreateVisualSubSelectionFromObjectArgs): CustomVisualSubSelection — create CustomVisualSubSelection object from the createVisualSubSelectionArgs(createVisualSubSelectionArgs).
setDataForElement(el: HTMLElement | SVGElement, data: SubSelectionElementData): void — metoda statyczna, która ustawia dane dla elementów.
getDataForElement(el: HTMLElement | SVGElement): SubSelectionElementData — metoda statyczna, która pobiera skojarzona wcześniej z elementem 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
}
Aby dodać opcje ograniczeń do określonego elementu z HTMLSubSelectionHelper
setDataForElement
tym typem danych, pomocnik używa danych do aktualizowania konspektów:
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;
}
Przykład
W tym przykładzie zaimplementujemy customOutlineCallback
i selectionIdCallback
: Następujący kod znajduje się w programie Visual Code.
Mamy obiekt w wizualizacji o nazwie arcElement
. Chcemy renderować konspekt po umieszczeniu wskaźnika myszy lub wybraniu podsektu.
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;
}
}
Zaimportuj element HtmlSubSelectionHelper:
import { HtmlSubSelectionHelper } from 'powerbi-visuals-utils-onobjectutils';
W kodzie konstruktora utwórz element 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),
});
….
}
W metodzie aktualizacji wizualizacji dodaj następujący kod, aby zaktualizować konspektu podwybierz, zaktualizuj stan trybu formatu dla HTMLSubSelectionHelper
i wyłącz interakcje, które nie są dla trybu formatowania, jeśli jest włączony tryb formatowania:
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);
}
…
}