Aurelia强制不带getter的脏检查

Aurelia强制不带getter的脏检查,aurelia,Aurelia,我试图根据函数调用的结果有条件地向元素添加一个类,但Aurelia不会在其参数更改时重新运行该函数。通常我会使用getter来强制脏检查,但由于我的函数需要参数,这是不可能的 所讨论的函数如下所示: isVisible(项目、过滤器){ //如果未选择任何筛选器,或者筛选器中至少有一个项目的标记名,则该项目被视为可见 返回(!filters.length | |)(filters.length&&item.tags.some(tag=>{ 返回filters.indexOf(tag.name)!

我试图根据函数调用的结果有条件地向元素添加一个类,但Aurelia不会在其参数更改时重新运行该函数。通常我会使用getter来强制脏检查,但由于我的函数需要参数,这是不可能的

所讨论的函数如下所示:

isVisible(项目、过滤器){
//如果未选择任何筛选器,或者筛选器中至少有一个项目的标记名,则该项目被视为可见
返回(!filters.length | |)(filters.length&&item.tags.some(tag=>{
返回filters.indexOf(tag.name)!=-1?true:false;
})));
}
如果不明显,则使用
和字符串数组(
过滤器
),然后检查
项.tags[].name
是否在
过滤器数组内

在我看来,它是这样使用的:



我还尝试将代码直接添加到视图中,我认为这将迫使Aurelia重新计算,但在将函数的全部代码添加到视图中时(在
${code here}
中)我得到了意外的解析错误

只要更改
过滤器,您上面的示例就足以让它重新计算。但是,如果您改变
过滤器
,Aurelia将无法检测到更改,因为出于性能原因,阵列观察不是自动的。您可以通过使用
过滤器的不可变实例来解决此问题,或者另外观察
过滤器的长度,如下所示:


看看这个:很好,只需传入
过滤器。length
成功了!我理解为什么,尽管它确实感觉有点像黑客……一个问题,实际上,
过滤器
数组实际上在我的虚拟机中是可用的,所以从我的视图中传递它并不是绝对必要的。如果只传入
,是否有任何方法可以达到相同的结果<代码>是否可见(项目)
?在VM的
isVisible
方法上是否有装饰器或其他东西可以使用?您感兴趣的是方法观察,这是目前不支持的。我想您最好使用一个信号,每次更改
过滤器
,都会向
重复
绑定发送信号以重新评估。