Класс PlacementManager

Используется для управления placement виджетов в приложении Bitrix24.
Мы всё ещё дорабатываем эту страницу. Некоторых данных здесь может не хватать — скоро дополним.

Подробнее

Геттеры

title

get title(): string

Псевдоним placement. Возвращает заголовок placement ('DEFAULT', если заголовок не был предоставлен родительским окном).

placement

get placement(): string

Возвращает заголовок placement. По умолчанию возвращает 'DEFAULT', если заголовок не задан.

isDefault

get isDefault(): boolean

Возвращает true, если заголовок placement равен 'DEFAULT'.

options

get options(): any

Возвращает объект опций placement. Объект заморожен для предотвращения изменений.

isSliderMode

get isSliderMode(): boolean

Возвращает true, если виджет работает в режиме слайдера (опция IFRAME равна 'Y').

// ... /////
$b24 = await initializeB24Frame()
// ... /////
if ($b24.placement.isSliderMode) {
    $b24.parent.setTitle('SliderMode')
}

Методы

getInterface

async getInterface(): Promise<any>

Получение информации о JS-интерфейсе текущего места встраивания: список возможных команд и событий.

// ... /////
$b24 = await initializeB24Frame()
// ... /////
const value: any = await $b24.placement.getInterface()

bindEvent

async bindEvent(eventName: string): Promise<any>

Настройка обработчика события для интерфейса.

call

async call(command: 'setValue', parameters: { value: string }): Promise<any>
async call(command: string, parameters?: Record<string, any>): Promise<any>

Вызывает зарегистрированную команду интерфейса.

import { LoggerFactory } from '@bitrix24/b24jssdk'
// ... /////
const logger = LoggerFactory.createForBrowser('Demo', true)

$b24 = await initializeB24Frame()
// ... /////
$b24.placement.call('reloadData')
  .then((respose: any) => {
    logger.info('reload call')
  })
Команда setValue особенная: родительское окно вызывает JSON.parse(value) на полученном payload, поэтому valueобязан быть JSON-сериализованной строкой. Передача обычной строки или объекта напрямую приведёт к ошибке (SyntaxError из JSON.parse или тихому повреждению до "[object Object]").Предпочитайте хелпер setValue, который сериализует за вас. Если вы используете call('setValue', ...) напрямую, SDK выбросит TypeError, когда value не является строкой.
// ✗ выбрасывает TypeError — value не является строкой
await $b24.placement.call('setValue', { value: 'test' })

// ✓ работает — value является JSON-строкой
await $b24.placement.call('setValue', { value: JSON.stringify('test') })
await $b24.placement.call('setValue', { value: JSON.stringify({ id: 1 }) })

setValue

async setValue(value: unknown): Promise<any>

Удобная обёртка над placement.call('setValue', ...), которая выполняет JSON.stringify над значением за вас. Принимает любое JSON-сериализуемое значение (строку, число, булево, объект, массив).

$b24 = await initializeB24Frame()
// ... /////
await $b24.placement.setValue('test')
await $b24.placement.setValue({ id: 1, title: 'demo' })

callCustomBind

async callCustomBind(
  command: string,
  parameters: null | string | Record<string, any>,
  callBack: (...args: any[]) => void
): Promise<any>

Вызывает команду интерфейса и регистрирует callback, который получает последующие события от команды. Используйте это для команд, которые порождают непрерывные события (например, обновления прогресса), вместо однократного разрешения.

parameters принимает три формы:

  • null — без payload.
  • string — отправляется как singleOption.
  • Record<string, any> — раскрывается в payload сообщения.
$b24 = await initializeB24Frame()
// ... /////
$b24.placement.callCustomBind('subscribe', { topic: 'crm:deal' }, (event) => {
  console.log('event', event)
})