Значение элемента управления PCF загружается не всегда; это состояние гонки или что-то еще? Как я могу сказать?
Кто-нибудь еще видел условия гонки в инициализации Power Apps Component Framework (PCF), где значение элемента управления не установлено?
Как мне это проверить?
Я не вижу вызова API при загрузке формы (в UCI)? Я вижу это в пакетном вызове из представления сетки, но это не должно быть?
Вот мой код:
public init(context: ComponentFramework.Context<IInputs>, notifyOutputChanged: () => void, state: ComponentFramework.Dictionary, container: HTMLDivElement) {
this.context = context;
this.container = document.createElement("div");
this.container.setAttribute("class", "acgContainer")
this._refreshIndex = this.refreshIndex.bind(this);
this.notifyOutputChanged = notifyOutputChanged;
this.value = context.parameters.acgAriasYesNoUnControl.raw;
//console.log("the init value: ", this.value);
this.options = context.parameters.acgAriasYesNoUnControl.attributes?.Options;
//console.log(this.options);
this.selectElement = document.createElement("select");
this.selectElement.addEventListener('change', this._refreshIndex);
// @ts-ignore
var zeroEle = this.selectElement.appendChild(new Option("---", null));
zeroEle.style.backgroundColor = "#ffffff";
if (this.options) {
if (this.options.length > 0) {
this.options.map((option: ComponentFramework.PropertyHelper.OptionMetadata, index: number) => {
var ele = this.selectElement.appendChild(new Option(option.Label, option.Value.toString()));
ele.style.backgroundColor = "#ffffff";
if (option.Label === this.envYesValue) {
//console.log("green option: ", option.Value);
this.valueOfYes = option.Value;
}
if (this.value === option.Value) {
ele.dataset.selected = "true";
}
})
}
}
// @ts-ignore
this.selectElement.value = this.value?.toString() || null;
this.selectElement.setAttribute("class", "acgYesNoUnControl");
this.container.appendChild(this.selectElement);
container.appendChild(this.container);
//this.notifyOutputChanged();
}
1 ответ
Оказывается, вам нужно установить значение HTMLElement в функции updateView!
Метод init может не устанавливать значение изначально, так как он может не иметь значения с сервера. Но функция updateView запускается каждый раз, когда видит новое значение, и обновляет HTMLElement.
Ссылка, спасибо DianaB и Greg Hurlman
Итак, я должен был выделить функцию updateView:
public updateView(context: ComponentFramework.Context<IInputs>): void {
this.context = context;
// storing the latest context from the control.
// @ts-ignore
this.selectElement.value = context.parameters.acgAriasYesNoUnControl.raw
? context.parameters.acgAriasYesNoUnControl.raw
: null;
this.value = context.parameters.acgAriasYesNoUnControl.raw
? context.parameters.acgAriasYesNoUnControl.raw
: null;
if (this.value === this.valueOfYes) {
this.selectElement.style.backgroundColor = "#8cbd18";
} else {
this.selectElement.style.backgroundColor = "#ffffff";
}
}