knockout.js - 在数据绑定中创建过滤条件:foreach
问题描述
是否可以在 foreach 中创建一个过滤器。我的目标是显示来自我的 ko.obervableArray 的特定数据。在我在 JS Fiddle 上创建的示例中,我的目标是仅显示 type="family"。
https://jsfiddle.net/zo8ygfk4/111/
<table>
<thead>
<tr><th>name</th><th>address</th><th>Type</th></tr>
</thead>
<tbody id="sample" data-bind="foreach: items">
<!-- ko: type === 'family' -->
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: address"></td>
<td data-bind="text: type"></td>
</tr>
<!-- /ko -->
</tbody>
</table>
var people = [
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
];
var quotesarray = function(){
var self=this;
self.items = ko.observableArray();
window.setInterval(function(){
self.items.removeAll();
ko.utils.arrayPushAll(self.items, people)
},1000);
};
ko.applyBindings(new quotesarray()
)
解决方案
您的 HTML 代码中有错字:“ko: type === 'family'”必须替换为“ko if: type === 'family'”
var people = [
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 1", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "family" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
{ name: "Contact 2", address: "1, a street, a town, a city, AB12 3CD", tel: "0123456789", email: "anemail@me.com", type: "friend", Type: "1" },
];
var quotesarray = function(){
var self=this;
self.items = ko.observableArray();
window.setInterval(function(){
self.items.removeAll();
ko.utils.arrayPushAll(self.items, people)
},1000);
};
ko.applyBindings(new quotesarray()
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
<thead>
<tr><th>name</th><th>address</th><th>Type</th></tr>
</thead>
<tbody id="sample" data-bind="foreach: items">
<!-- ko if: type === 'family' -->
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: address"></td>
<td data-bind="text: type"></td>
</tr>
<!-- /ko -->
</tbody>
</table>
推荐阅读
- mysql - 如何在 MySQL 中的“FROM”子句上使用“LIKE”函数
- android-studio - Android Studio 调色板属性问题
- azure-analysis-services - JSON DDL 请求失败 - 管道行集丢失
- github - Github 中的文件加密
- android - 如何将异步任务用于不同的值。我将在描述中简要解释我的问题
- sql-server - 如何在订单详细信息表中保留销售价格?
- python - 为什么此 CloudFormation 模板脚本不起作用?
- javascript - 评级功能重复问题 - JavaScript
- apache-spark - hadoop fs -du 输出不反映复制因子
- javascript - 无法访问 Fetch API 中的标头“Content-Length”,Chrome 扩展程序中的 CORS 请求