Βοηθητικά προγράμματα on-object - βοηθητική εφαρμογή δευτερεύουσας ενότητας (προεπισκόπηση)
Παρέχει HTMLSubSelectionHelper
έναν εύκολο τρόπο για την προσαρμοσμένη απεικόνισή σας Power BI να εκπέμπει υποεπιλογές στο Power BI, να λαμβάνει και να αποδίδει περιγράμματα.
HTMLSubSelectionHelper
Το είναι μια κλάση βοηθητικής εφαρμογής που προορίζεται για να διευκολύνει τη δημιουργία και την επακόλουθη διαχείριση των περιγραμμάτων δευτερεύουσας ενότητας. Περιέχει μεθόδους για την εύρεση στοιχείων με δυνατότητα δευτερεύουσας επιλογής.
Τα βοηθητικά προγράμματα εξάγουν κλάσεις και χαρακτηριστικά CSS, διευκολύνοντας τον ορισμό και τη διατήρηση δευτερευουσών επιλογών για την απεικόνιση.
Σημείωμα
Χρησιμοποιήστε την έκδοση 6.0.1 ή νεότερη των βοηθητικών προγραμμάτων.
Για να ορίσουμε στοιχεία με δυνατότητα δευτερεύουσας επιλογής, πρέπει επίσης να προσθέσουμε μια κλάση σε κάθε επιθυμητό στοιχείο.
CSS Κλάση | Σκοπός | Απαραίτητο |
---|---|---|
με δυνατότητα δευτερεύουσας επιλογής | Παρέχει έναν επιλογέα για την HTMLSubSelectionHelper εύρεση πιθανών δευτερευουσών επιλογών |
Ναι |
Για να ορίσετε υποεπιλογές για την απεικόνιση, υπάρχουν μερικά χαρακτηριστικά που πρέπει να προστεθούν στα επιθυμητά στοιχεία.
Όνομα χαρακτηριστικού | Χαρακτηριστικό | Σκοπός | Απαραίτητο | Τύπος | Παράδειγμα |
---|---|---|---|---|---|
SubSelectableDisplayNameAttribute | data-sub-selection-display-name | Εισαγάγετε μια μεταφραζόμενη συμβολοσειρά για το εμφανιζόμενο όνομα του στοιχείου της δευτερεύουσας επιλογής | Ναι | συμβολοσειρά | data-sub-selection-display-name="Visual Title" |
SubSelectableObjectNameAttribute | data-sub-selection-object-name | Καταχωρήστε ένα όνομα αντικειμένου για συσχέτιση με συντομεύσεις και στυλ δευτερεύουσας επιλογής | Ναι | συμβολοσειρά | data-sub-selection-object-name="title" |
SubSelectableTypeAttribute | τύπος-δευτερεύουσας-επιλογής δεδομένων | Εισαγάγετε τον τύπο του στυλ της δευτερεύουσας επιλογής | Ναι | SubSelectionStylesType | data-sub-selection-type="1" |
SubSelectableDirectEdit | data-sub-selection-direct-edit | Παροχή αναφορών επεξεργασίας άμεσου κειμένου, συμπεριλαμβανομένων των CardUID, GroupUID και του προσανατολισμού του πλαισίου κειμένου | Όχι | Το SubSelectableDirectEdit θα πρέπει να παρέχεται ως συμβολοσειρά | data-sub-selection-direct-edit="{"reference":{"cardUid":"Visual-title","groupUid":"title-text","sliceUid":"title-text-text"},"style":0}" |
SubSelectableHideOutlineAttribute | data-sub-selection-hide-outline | Παροχή μιας δυαδικής τιμής για στοιχεία με δυνατότητα δευτερεύουσας επιλογής, στα οποία δεν θα πρέπει να εμφανίζεται ένα περίγραμμα | Όχι | boolean | data-sub-selection-hide-outline="true" |
SubSelectableRestrictingElementAttribute | data-sub-selection-restricting-element | Χρησιμοποιείται για να υποδείξει το στοιχείο που θα είναι περιορισμένο, τα περιγράμματα και τον τύπο περιορισμού (σφιγκτήρας ή κλιπ) | Όχι | SubSelectionOutlineRestrictionType | data-sub-selection-restricting-element="1" |
SubSelectableSubSelectedAttribute | data-sub-selection-sub-selected | Υποδεικνύει εάν επιλέγεται ή όχι η δευτερεύουσα επιλογή | Όχι, η βοηθητική εφαρμογή την εκχωρεί στα στοιχεία όταν χρειάζεται | Boolean | data-subselection-sub-selected="true" |
Λειτουργία μορφοποίησης
Όταν η απεικόνιση μορφοποιηθεί, πρέπει να απενεργοποιήσετε την αλληλεπίδραση για την απεικόνιση, καθώς αναμένουμε από τον χρήστη να επιλέξει την απεικόνιση και το οπτικό στοιχείο για να ξεκινήσει τη μορφοποίηση.
Δημόσιες μέθοδοι HTMLSubSelectionHelper
Το HTMLSubSelectionHelper
έχει ορισμένες δημόσιες μεθόδους που μπορείτε να χρησιμοποιήσετε, αλλά υπάρχουν δύο κύριες μέθοδοι και ο βοηθητικός χρήστης κάνει τα υπόλοιπα.
Οι δύο μέθοδοι είναι setFormatMode
και updateOutlinesFromSubSelections
.
Οι δημόσιες μέθοδοι της βοηθητικής εφαρμογής περιλαμβάνουν τα εξής:
createHtmlSubselectionHelper(οργές: HtmlSubselectionHelperArgs): HtmlSubSelectionHelper - Αυτή είναι μια στατική μέθοδος που λαμβάνει οργώσεις τύπου
HtmlSubselectionHelperArgs
και επιστρέφει μια παρουσία τουHTMLSubSelectionHelper
.setFormatMode(isFormatMode: boolean): void - Αυτή η μέθοδος ορίζει τη λειτουργία μορφοποίησης για το HTMLSubSelectionHelper, If isFormatMode είναι true, η βοηθητική υπηρεσία επισυνάπτει σχετικές ακροατές συμβάντων στο στοιχείο κεντρικού υπολογιστή για να ενεργοποιήσει τη λειτουργία μορφοποίησης (δευτερεύουσα επιλογή, απόδοση περιγραμμάτων).
getSubSelectionSourceFromEvent(event: PointerEvent): HtmlSubSelectionSource ή μη καθορισμένο - επιστρέφει ένα
HtmlSubSelectionSource
αντικείμενο που έχει δημιουργηθεί σύμφωνα με την παράμετρο συμβάντος.onVisualScroll(): void - Υποδεικνύει στην HTMLSubSelectionHelper ότι αυτή τη στιγμή πραγματοποιείται κύλιση. Η κύλιση θα πρέπει να καταργήσει τα περιγράμματα μέχρι να ολοκληρωθεί η κύλιση.
updateElementOutlines(elements: HTMLElement[], visibility: SubSelectionOutlineVisibility, suppressRender: boolean = false): SubSelectionRegionOutlineId[] - ενημερώστε τα περιγράμματα (και τα εκπέμπετε στο Power BI για να αποδοθούν) των στοιχείων.
clearHoveredOutline(): void - Αυτή η μέθοδος απαλείφει τα περιγράμματα που αιωρούνται εάν υπάρχουν.
updateRegionOutlines(regionOutlines: HelperSubSelectionRegionOutline[], suppressRender: boolean = false): void - ενημερώστε και εκπέμπετε τα δεδομένα περιγράμματα για να αποδοθούν.
getElementsFromSubSelections(subSelections: CustomVisualSubSelection[]): HTMLElement[] - δεδομένου του subSelections, αυτή η μέθοδος επιστρέφει τις σχετικές HTMLElements.
updateOutlinesFromSubSelections(subSelections: CustomVisualSubSelection[], clearExistingOutlines?: boolean, suppressRender?: boolean): void - ενημερώνει και αποδίδει τα περιγράμματα για τη δεδομένη υποεπιλογή σε σχέση με την καταστολή τουRender και της εκκαθάρισηςExistingOutlines.
hideAllOutlines(suppressRender: boolean = false): void - αποκρύψτε όλες τις περιγράμματα σε σχέση με την suppressRender.
getAllSubSelectables(filterType?: SubSelectionStylesType): CustomVisualSubSelection[] - επιστρέφει όλα τα υποεπιλεγόμενα σύμφωνα με το filterType.
createVisualSubSelectionForSingleObject(createVisualSubSelectionArgs: CreateVisualSubSelectionFromObjectArgs): CustomVisualSubSelection - δημιουργήστε το αντικείμενο CustomVisualSubSelection από το createVisualSubSelectionArgs.
setDataForElement(el: HTMLElement | SVGElement, data: SubSelectionElementData): void - μια στατική μέθοδος που ορίζει δεδομένα για τα στοιχεία.
getDataForElement(el: HTMLElement | SVGElement): SubSelectionElementData - μια στατική μέθοδος που λαμβάνει τη συσχετισμένη μέθοδο που αντιστοιχίστηκε προηγουμένως με τη συνάρτηση 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
}
Για να προσθέσετε επιλογές περιορισμού σε ένα συγκεκριμένο στοιχείο, χρησιμοποιήστε το HTMLSubSelectionHelper
setDataForElement
με αυτόν τον τύπο δεδομένων, η βοηθητική εφαρμογή χρησιμοποιεί τα δεδομένα για να ενημερώσει τις περιγράμματα:
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;
}
Παράδειγμα
Σε αυτό το παράδειγμα, υλοποιούμε customOutlineCallback
τα και selectionIdCallback
: Ο ακόλουθος κώδικας βρίσκεται στον Κώδικα απεικόνισης.
Έχουμε ένα αντικείμενο στην απεικόνιση που ονομάζεται arcElement
. Θέλουμε να αποδώσετε το περίγραμμα όταν κατάδειξη ή δευτερεύουσα επιλογή του στοιχείου.
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;
}
}
Εισαγάγετε το HtmlSubSelectionHelper:
import { HtmlSubSelectionHelper } from 'powerbi-visuals-utils-onobjectutils';
Στον κώδικα κατασκευής, δημιουργήστε το 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),
});
….
}
Στη μέθοδο ενημέρωσης της απεικόνισης, προσθέστε τον παρακάτω κώδικα για να ενημερώσετε τις περιγράμματα της δευτερεύουσαςεπιλογής, ενημερώστε την κατάσταση της λειτουργίας μορφοποίησης για το HTMLSubSelectionHelper
και απενεργοποιήστε τις αλληλεπιδράσεις που δεν αφορούν τη λειτουργία μορφοποίησης εάν η λειτουργία μορφοποίησης είναι ενεργοποιημένη:
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);
}
…
}