Настройка отдельного набора опций для каждого элемента

Набор опций записи можно задать двумя способами: с помощью управления видимостью общего набора опций записи или задать особую конфигурацию опций для каждого элемента отдельно. Приоритетной является конфигурация отдельного набора опций для каждого элемента.

Управление видимостью общего набора опций записи

Для каждого элемента можно управлять видимостью набора опций. Для этого в опции itemActionVisibilityCallback задается функция, которая будет вызываться для каждой опции записи, а возвращаемый результат — определять видимость такой опции. Когда из функции возвращается false, тогда опция записи будет скрыта.

В функции доступны следующие аргументы:

  • action — объект с конфигурацией опции записи для текущего элемента.
  • item — экземпляр модели (см. Types/entity:Model), для которой требуется определить видимость опции записи, описанной в параметре action.
  • isEditing — редактируется ли в текущий момент элемент списка.

В следующем примере для первого и третьего элементов не отображается часть опций записи.

Пример
Исходный код
<!-- WML -->
<Controls.list:View
   source="{{_viewSource}}"
   itemActions="{{_itemActions}}"
   itemActionVisibilityCallback="{{_itemActionVisibilityCallback}}"/>
// TypeScript
protected _itemActionVisibilityCallback(itemAction: IItemAction, item: Model): boolean {
    if (itemAction.title === 'Позвонить') {
        return false;
    } else if (itemAction.showType === showType.MENU && itemAction.id === 6) {
        return false;
    }
 
    const itemId = item.getId();
    if ((itemId === 0 || itemId === 2) &&
        (itemAction.showType === showType.MENU || itemAction.showType === showType.MENU_TOOLBAR)) {
        return false;
    }
    return true;
}

Настройка отдельного набора опций для каждого элемента

Также с помощью опции itemActionsProperty можно задать конфигурацию набора опций записи для каждого элемента.

В следующем примере для каждого элемента настроен отдельный набор опций записи.

Пример
Исходный код
<!-- WML -->
<Controls.list:View
   source="{{_source}}"
   itemActionsProperty="itemActions"/>
// TypeScript
protected _beforeMount(): void {
    this._viewSource = new source.Memory({
        keyProperty: 'id',
        data: [{
            id: 0,
            title: 'The agencies’ average client makes about $32,000 a year.',
            itemActions: [{ id: 1, title: 'Прочитано', showType: showType.TOOLBAR }]
        }]
    });
}