Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это HTMLSubSelectionHelper позволяет пользовательскому визуальному элементу Power BI выдавать вложенные выборы в Power BI, получать и отрисовывать контуры.
HTMLSubSelectionHelper — вспомогательный класс, предназначенный для упрощения создания и последующего управления структурами подселектора. Он содержит методы для поиска вложенных элементов.
Utils экспортирует классы и атрибуты CSS, что упрощает определение и обслуживание вложенных выборов визуального элемента.
Примечание.
Используйте версию 6.0.1 или более позднюю версию utils.
Чтобы определить вложенные элементы, необходимо также добавить класс к каждому нужному элементу.
| Класс CSS | Характер использования | Обязательное поле |
|---|---|---|
| subselectable | Предоставляет селектор для HTMLSubSelectionHelper поиска возможных вложенных выборов |
yes |
Чтобы определить вложенные выборы для визуального элемента, существует несколько атрибутов, которые необходимо добавить в нужные элементы.
| Имя атрибута | Атрибут | Характер использования | Обязательное поле | Тип | Пример |
|---|---|---|---|---|---|
| SubSelectableDisplayNameAttribute | имя объекта data-sub-selection-display-name | Укажите локализованную строку для отображаемого имени выбранного элемента. | yes | строка | data-sub-selection-display-name="Visual Title" |
| SubSelectableObjectNameAttribute | data-sub-selection-object-name | Укажите имя объекта для связывания с сочетаниями сочетаний клавиш и стилем вложенного выбора. | yes | строка | data-sub-selection-object-name="title" |
| SubSelectableTypeAttribute | тип выбора данных | Укажите тип выбранного вложенного стиля | yes | SubSelectionStylesType | data-sub-selection-type="1" |
| SubSelectableDirectEdit | data-sub-selection-direct-edit | Предоставление прямых ссылок на редактирование текста, включая CardUID, GroupUID и ориентацию текстового поля | no | 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 | Укажите логическое значение для вложенных элементов, которые не должны отображать структуру | no | boolean | data-sub-selection-hide-outline="true" |
| SubSelectableRestrictingElementAttribute | элемент data-sub-selection-restricting-element | Используется для указания элемента, который будет ограничен, контуров и типа ограничения (закрепления или клипа) | no | SubSelectionOutlineRestrictionType | data-sub-selection-restricting-element="1" |
| SubSelectableSubSelectedAttribute | выбран элемент data-sub-selection-sub-selected | Укажите, выбран ли вложенный выбор. | Нет, помощник назначает его элементам при необходимости. | Логический | data-subselection-sub-selected="true" |
Режим форматирования
Когда визуальный элемент входит в режим форматирования, необходимо отключить интерактивность для визуального элемента, так как мы ожидаем, что пользователь выберет визуальный и визуальный элемент, чтобы инициировать форматирование.
Общедоступные методы HTMLSubSelectionHelper
В HTMLSubSelectionHelper нем есть некоторые общедоступные методы, которые можно использовать, но есть два основных метода, и вспомогательный выполняет остальные.
Два метода: setFormatMode и updateOutlinesFromSubSelections.
К общедоступным методам вспомогательного средства относятся следующие:
createHtmlSubselectionHelper(args: HtmlSubselectionHelperArgs): HtmlSubSelectionHelper — это статический метод, который принимает args типа
HtmlSubselectionHelperArgsи возвращает экземплярHTMLSubSelectionHelper.setFormatMode(isFormatMode: boolean): void— этот метод задает режим формата для HTMLSubSelectionHelper, если isFormatMode имеет значение true, вспомогательный помощник присоединяет соответствующие прослушиватели событий к элементу узла, чтобы включить функциональные возможности режима форматирования (вложенные выборы, контуры отрисовки).
getSubSelectionSourceFromEvent(event: PointerEvent): HtmlSubSelectionSource или undefined — возвращает
HtmlSubSelectionSourceобъект, созданный в соответствии с параметром события.onVisualScroll(): void — указывает htmlSubSelectionHelper, что прокрутка в настоящее время происходит. Прокрутка должна удалять контуры до завершения прокрутки.
updateElementOutlines(elements: HTMLElement[], видимость: SubSelectionOutlineVisibility, suppressRender: boolean = false): SubSelectionRegionOutlineId[] — обновите контуры (и отправляет их в Power BI для отрисовки) элементов.
clearHoveredOutline(): void — этот метод очищает наведенные контуры, если они существуют.
updateRegionOutlines(regionOutlines: HelperSubSelectionRegionOutline[], suppressRender: boolean = false): void — обновление и выдает заданные контуры для отрисовки.
getElementsFromSubSelections(subSelections: CustomVisualSubSelection[]): HTMLElement[] — заданные вложенные элементы выбора, этот метод возвращает соответствующие элементы HTMLElements.
updateOutlinesFromSubSelections(subSelections: CustomVisualSubSelection[], clearExistingOutlines?: boolean, suppressRender?: boolean?: void — обновляет и отрисовывает контуры для заданного подселекция относительно подавления и очисткиExistingOutlines.
hideAllOutlines(suppressRender: boolean = false): void — скрытие всех контуров относительно подавленияRender.
getAllSubSelectables(filterType?: SubSelectionStylesType): CustomVisualSubSelection[] — возвращает все вложенные значения в соответствии с фильтром.
createVisualSubSelectionForSingleObject(createVisualSubSelectionArgs: CreateVisualSubSelectionFromObjectArgs): CustomVisualSubSelection — создание объекта CustomVisualSubSelection из объекта createVisualSubSelectionArgs.
setDataForElement(el: HTMLElement | SVGElement, данные: 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: следующий код находится в Visual Code.
У нас есть объект в визуальном элементе 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);
}
…
}