У меня есть выпадающий список. Если пользователь выбирает параметр all
, я хочу, чтобы все остальные параметры были отменены, и выберите только all
. У меня это почти работает, но моя проблема в том, что select
не показывает обновленное значение, пока не минимизировать выпадающий список. Состояние observableArray
представляется правильным.
Вот HTML:
<select data-bind="options: games, selectedOptions: selectedGame, optionsText: 'name', optionsValue: 'id'" multiple="true"></select>
И javascript:
this.games= [
{
name: 'All',
id: 'all'
},
{
name: 'Game1',
id: 'game1'
},
{
name: 'Game2',
id: 'game2'
},
]
this.selectedGame = ko.observableArray(['all']);
this.selectedGameBeforeChange = ko.observableArray([]);
this.selectedGame.subscribe((oldValue) =>
{
this.selectedGameBeforeChange(oldValue);
}, null, 'beforeChange');
this.selectedGame.subscribe((newValue) =>
{
const newValueAdded = newValue.filter(x => !this.selectedGameBeforeChange().includes(x));
if (newValueAdded.length > 0 && newValueAdded[0] === 'all'){
this.selectedGame.removeAll();
this.selectedGame.push('allCombined');
}
this.updateTable();
});
приведенный выше код работает, но изменение отражается в пользовательском интерфейсе только после того, как я «свернул» выбор и снова открыл его. Есть ли способ принудительно обновить пользовательский интерфейс, как только мой observableArray
будет обновлен?