【发布时间】:2014-02-18 04:36:00
【问题描述】:
我正在使用 Dart Polymer 的重复模板来显示列表项。现在,我想实现一个搜索过滤器,其中只显示与键入的搜索词相关的项目。考虑以下代码:
my-element.html
<polymer-element name="my-element">
<script type="application/dart" src="my-element.dart"></script>
<template>
<input type="text" value="{{ searchTerm }}">
<ul>
<template repeat="{{ item in items }}">
<template if="{{ matchesSearchFilter(item) }}">
<li>{{ item }}</li>
</template>
</template>
</ul>
</template>
</polymer-element>
my-element.dart
@CustomTag('my-element')
class MyElement extends PolymerElement {
@observable List<String> items = toObservable(["Monday", "Tuesday", "Wednesday"]);
@observable String searchTerm = '';
MyElement.created() : super.created();
matchesSearchFilter(String item) {
if (searchTerm.isEmpty) return true;
return item.toLowerCase().contains(searchTerm.toLowerCase());
}
}
例如,当我在文本框中键入“Mo”时,我希望项目列表会自动更新,从而只显示“Monday”。但是,在键入任何搜索词时,列表保持不变并且搜索词被忽略。
那么,如何正确实现这样的功能呢?
【问题讨论】:
-
什么不起作用?您是否验证了
searchTerm是否被设置以及matchesSearchFilter是否被调用? -
是的,
searchTerm设置正确。matchesSearchFilters在第一次呈现列表时被调用(但不是在searchTerm发生变化时)。 -
你可以试试stackoverflow.com/questions/20004117这里我发布了另一个过滤器示例,如果你想尝试这条路线stackoverflow.com/questions/20323815可能会有所帮助
标签: dart dart-polymer