我有这个viewmodel,并且所有代码都有效
@connectTo<State>({
selector: (store) => store.state.pipe(pluck('domain')).pipe(pluck('games')),
target: 'games',
})
@connectTo<State>({
selector: (store) => store.state.pipe(pluck('domain')).pipe(pluck('myGames')),
target: 'myGames',
})
@autoinject()
@customElement('games')
export default class Games {
private static readonly ADD_TO_MYGAMES = 'addToMyGames';
@bindable() games: Game[] = [];
myGames: Game[] = [];
constructor(
private readonly store: Store<State>,
) {
store.registerAction(Games.ADD_TO_MYGAMES, myGamesState);
}
available(game: Game): boolean {
console.log("available", game);
return !!this.myGames.find((i) => _.isEqual(i, game));
}
addGame(game: Game) {
this.store.dispatch(Games.ADD_TO_MYGAMES, game);
}
}
const myGamesState = async (current: State, game: Game) => {
console.log(game);
return produce(current, state => {
state.domain.myGames.push(game);
});
}
问题是当myGames作为新游戏时,视图不会刷新 available
<template bindable="games">
<div class="columns">
<ul class="column">
<li repeat.for="game of games" class="level">
<button class="button level-item is-fullwidth ${available(game) ? 'is-success' : ''}" click.delegate="addGame(game)"
disabled.bind="available(game)">
${game.name}
</button>
</li>
</ul>
</div>
</template>
我应该如何解决这个问题?
我认为您正在执行功能参考。您将要使用:
disabled.call="available(game)"
请参阅:Aurelia中的函数引用
由于样式没有改变,因此在css类中似乎也没有调用它,而且我有点担心它需要被调用两次。我也看不到这将如何工作,因为aurelia如何知道再次调用它?
第一次创建列表时会调用t,但在更新列表时不会调用它
call
是正确的选择,但我无法使其正常工作,是的,我已经阅读了文档,也许您可以提供一个更完整的示例。抱歉,我没有时间创建一个小样的演示应用程序来测试您要在此处进行的操作。也许如果我在接下来的几天有时间,但是您总是可以从不同的角度来对待它,例如在预绑定步骤中为每个游戏设置一个可用标志,或者在添加新游戏时设置一个事件。