Aurelia 在没有 getter 的情况下强制进行脏检查
Aurelia force dirty checking without getter
我正在尝试根据函数调用的结果有条件地向元素添加 class,但 Aurelia 不会在其参数更改时重新 运行 函数。通常我会使用 getter 来强制进行脏检查,但由于我的函数需要不可能的参数。
有问题的函数如下所示:
isVisible (item, filters) {
// If there are no filters selected, or at least one of the item's tag names are inside the filters the item is considered visible
return (!filters.length || (filters.length && item.tags.some(tag => {
return filters.indexOf(tag.name) !== -1 ? true : false;
})));
}
如果不明显,它需要一个 item
和一个字符串数组 (filters
),然后检查 item.tags[].name
中是否有任何一个在 [=14 的数组中=].
在我看来是这样使用的:
<item repeat.for="item of items" item.bind="item" class="${isVisible(item, filters) ? 'show' : 'hide'}"></item>
我也试过将代码直接添加到视图中,我认为这会迫使 Aurelia 重新计算东西,但是当将整个函数代码添加到视图中时(在 ${code here}
内)我得到分析错误意外 >
.
您上面的示例足以在 filters
更改时重新评估它。但是,如果您改变 filters
,Aurelia 将无法获取更改,因为出于性能原因,数组观察不是自动的。您可以通过使用 filters
的不可变实例来解决此问题,或者另外观察 filters
长度,如下所示:
<item repeat.for="item of items"
item.bind="item"
class="${isVisible(item, filters, filters.length) ? 'show' : 'hide'></item>
我正在尝试根据函数调用的结果有条件地向元素添加 class,但 Aurelia 不会在其参数更改时重新 运行 函数。通常我会使用 getter 来强制进行脏检查,但由于我的函数需要不可能的参数。
有问题的函数如下所示:
isVisible (item, filters) {
// If there are no filters selected, or at least one of the item's tag names are inside the filters the item is considered visible
return (!filters.length || (filters.length && item.tags.some(tag => {
return filters.indexOf(tag.name) !== -1 ? true : false;
})));
}
如果不明显,它需要一个 item
和一个字符串数组 (filters
),然后检查 item.tags[].name
中是否有任何一个在 [=14 的数组中=].
在我看来是这样使用的:
<item repeat.for="item of items" item.bind="item" class="${isVisible(item, filters) ? 'show' : 'hide'}"></item>
我也试过将代码直接添加到视图中,我认为这会迫使 Aurelia 重新计算东西,但是当将整个函数代码添加到视图中时(在 ${code here}
内)我得到分析错误意外 >
.
您上面的示例足以在 filters
更改时重新评估它。但是,如果您改变 filters
,Aurelia 将无法获取更改,因为出于性能原因,数组观察不是自动的。您可以通过使用 filters
的不可变实例来解决此问题,或者另外观察 filters
长度,如下所示:
<item repeat.for="item of items"
item.bind="item"
class="${isVisible(item, filters, filters.length) ? 'show' : 'hide'></item>