Я получил списки с помощью проводного адаптера getListUi. Я заполнил эти списки в списке выбора. Чего я пытаюсь добиться, так это того, что если я выберу список из списка выбора, записи должны обновляться динамически. Как мне этого добиться.

Прямо сейчас я попытался сделать это, сделав список выбора дочерним, а таблицу родительской, и попытался передать listViewApiName родителю с помощью @api. Но таблица ничего не показывает. Тоже без ошибки. Что делать?

Это код для получения listViews:

import { LightningElement,wire,track,api} from 'lwc';
import { getListUi} from 'lightning/uiListApi';
import PRODUCT_OBJECT from '@salesforce/schema/Product2';

export default class ShowListView extends LightningElement {
@track value;
@track allListViews;
@api progressValue;


@wire(getListUi, {objectApiName: PRODUCT_OBJECT})
wiredlistView({error,data}) {
    if(data){
        this.allListViews = data.lists;
        var listViewData = [];
    for(var i=0;i<this.allListViews.length;i++){
        listViewData.push({"label" : this.allListViews[i].label, "value" : this.allListViews[i].apiName});
    }
    this.allListViews = listViewData;
    }else if(error){
        console.log('An error has occurred:');
        console.log(error);
    }
}
handleChange(event) {
    this.value = event.detail.value;

    this.progressValue=event.target.value;
    const selectedEvent = new CustomEvent("progressvaluechange",{
        detail:this.progressValue
    });

    this.dispatchEvent(selectedEvent);
}

}

Это код для отображения записей:

import { LightningElement,wire,api,track } from 'lwc';
import PRODUCT_OBJECT from '@salesforce/schema/Product2';   
import { getListUi} from 'lightning/uiListApi';

export default class ShowPicklistValues extends LightningElement {
@track sobjectResult;
@track progressValue = 'AllProducts';

@wire(getListUi, {objectApiName: PRODUCT_OBJECT,listViewApiName: {progressValue})
lastView({error,data}){
    
    if (data) {
        this.sobjectResult = data.records.records;  
    } else if (error) {
        this.error = error;
    }
}

handleValueChange(event) {
    this.progressValue = event.detail.value;
}
}

Как только я заменю {progressValue} во втором блоке кода (7-я строка) на listViewApiName, например 'AllProducts', он работает, но отображается только для этого конкретного списка. Мне нужно, чтобы он менялся динамически.

Спасибо и извините за длинный пост. Я новичок в SalesForce и не знаю, как задавать вопросы с минимальными подробностями.

1
Nikhil Rayala 13 Июл 2020 в 21:55

1 ответ

Лучший ответ

Насколько я понимаю ваш вопрос, у вас есть поле со списком, заполненное всеми именами представлений списка, и после изменения этого вам необходимо повторно отобразить свой компонент с записями, связанными с этим представлением списка.

Чтобы ваша проводная служба могла получать новые данные, вам необходимо пометить свойство progressValue как динамическое и реактивное. Таким образом, ваша декларация проводной службы будет выглядеть так, как показано ниже (не $)

@wire(getListUi, {objectApiName: PRODUCT_OBJECT,listViewApiName: '$progressValue'})
lastView({error,data}) { 
    ... 
}

Это гарантирует, что всякий раз, когда в поле со списком выбирается новое значение представления списка, проводная служба вызывается с последним значением, и компонент повторно отображается соответствующим образом.

См. раздел «Отметить свойство объекта конфигурации как динамическое и реактивное» в документацию, чтобы узнать об этом подробнее. Выдержка из документации:

В объекте конфигурации проводного адаптера добавьте к значению префикс $, чтобы сослаться на свойство экземпляра компонента. Префикс $ указывает телеграфной службе рассматривать его как свойство класса и оценивать как this.propertyName. Свойство является реактивным. Если значение свойства изменяется, новые данные предоставляются и компонент перерисовывается.

2
Jayant Das 13 Июл 2020 в 22:43
Спасибо. Это сработало. Но не хватает еще одного функционала. Что происходит, когда я нажимаю на список... таблица не обновляется сразу... После того, как я выбираю другой список, отображаются предыдущие выбранные записи списка. Как мне преодолеть это?
 – 
Nikhil Rayala
14 Июл 2020 в 07:54
2
Если у вас есть дополнительный вопрос, не стесняйтесь открыть новый вопрос с необходимыми деталями. Здесь, в SFSE, один вопрос относится к одной проблеме, а комментарии используются только для дальнейшего разъяснения исходного вопроса.
 – 
Jayant Das
14 Июл 2020 в 16:08