У меня есть строка таблицы, которую пользователь может выбрать, щелкнув по ней или перейдя по URL-адресу (параметры маршрутизатора проверяются при активации модели просмотра). Наценка выглядит какAurelia не грязная функция проверки приводит к привязке атрибута класса HTML
<!--...-->
<template repeat.for="foo of foos">
<template repeat.for="bar of foo.bars">
<tr class="${(foo.pk == selectedFoo && bar.pk == selectedBar) ? 'active' : ''}" click.delegate="selectFooBar(foo.pk, bar.pk)"><!--...--></tr>
</template>
</template>
<!--...-->
Это прекрасно работает. Когда пользователь нажимает, selectFooBar
устанавливает параметры модели просмотра, и класс устанавливается на tr
.
Однако я попытался рефакторингом условного в метод (условный получат более сложным):
<tr class="${isFooBarSelected(foo.pk, bar.pk) ? 'active' : ''}" click.delegate="selectFooBar(foo.pk, bar.pk)"><!--...--></tr>
isFooBarSelected
просто возвращает истину/лжи на основе условного. Однако теперь этот метод не проверяется после загрузки страницы. Когда выбранные параметры изменяются (поскольку пользователь нажимает на другую строку), класс не обновляется. Любые идеи, как сделать Aurelia грязной проверкой isFooBarSelected
?
View-модель
export class Blah {
foo = [];
selectedFoo = undefined;
selectedBar = undefined;
// ...
/**
* Lifecycle method - just before view-model is displayed
* @param params route parameters
*/
activate(params) {
this.selectedFoo = params.foo;
this.selectedBar = params.bar;
}
selectFooBar(foo, bar) {
this.selectedFoo = foo;
this.selectedBar = bar;
}
isFooBarSelected(foo, bar) {
console.log('check', foo, bar, this.selectedFoo, this.selectedBar);
return foo == this.selectedFoo && bar == this.selectedBar;
}
}