gpt4 book ai didi

dart - map 列表中的 map

转载 作者:行者123 更新时间:2023-12-03 03:18:43 25 4
gpt4 key购买 nike

经过多次试验和错误,我不知道如何处理 Dart 中的嵌入式列表和 map ,以及如何通过 Polymer 数据绑定(bind)访问它们。目标是读取 JSON 文件并构建可以过滤和排序的 HTML 表。 (为了清楚起见,我只是在下面对 map 数据进行了硬编码。)

我可以在我的 Polymer 元素中构建一个 HTML 表(请参阅 buildTable),只要 Map 看起来像下面 Dart 代码中看到的 testMap3 并且它可以很好地呈现:

HTML:

<p><b>The data from testMap3 after building table in Dart file:</b>/p> 
<table class="bordered" id="dataTable"></table>

但是,我似乎无法弄清楚如何通过 Polymer 数据绑定(bind)来做到这一点。现在我只是转储 k-v 对,以便我可以看到对象:

HTML:
<p><b>The data from testMap3 via Polymer binding:</b></p> 
<template repeat="{{key in testMap.keys}}">
<p>{{key}} : {{testMap[key]}}</p>
</template>

如何使用数据绑定(bind)来创建与上面第一个示例的结果匹配的表?为了让事情变得更加困难,我该如何使用 testMap2 来代替?

Dart :

调用 buildTable 时渲染 testMap3 工作正常:
Map testMap3 = toObservable({
'columns' : ["First Name", "Attending", "Phone"],
'rows' : [{'First Name' : "Alice",
'Attending' : "Yes",
'Phone' : "555-1212"},
{'First Name' : "Bob",
'Attending' : "Yes",
'Phone' : "555-2323"}
]
});

鉴于附加的嵌入式“电话”值是包含另一个 map 的列表,因此通过 testMap2 进行迭代是有问题的:
 Map testMap2 = toObservable({
'columns' : ["First Name", "Attending", "Phone"],
'rows' : [{'First Name' : "Alice",
'Attending' : "Yes",
'Phone' : [{'Home' : "555-1234",
'Work' : "555-4321",
'Mobile' : "555-1212"}]},
{'First Name' : "Bob",
'Attending' : "Yes",
'Phone' : [{'Home' : "555-2345",
'Work' : "555-5432",
'Mobile' : "555-2323"}]}
]
});

以下代码适用于 testMap3,但如果我使用 testMap2,我没有尝试过让我遍历电话数据。关于如何做到这一点的任何想法?
buildTable() {

TableElement table = this.shadowRoot.querySelector("#dataTable");
table.children.clear();

TableSectionElement tBody = table.createTBody();

TableSectionElement tHead = table.createTHead();
TableRowElement trh = tHead.addRow();

for (var column in testMap3["columns"]) {
var cell = new Element.tag('th');
cell.text = column;
trh.append(cell);
}

for (var row in testMap3["rows"]) {

TableRowElement tr = tBody.addRow();
for (var column in testMap3["columns"]) {
tr.addCell().text = row[column];
}
}
}

最后,最终目标之一是采用类似于以下的方法过滤呈现表中的所有列......这可行吗?我似乎无法在列表中找到使用 map 甚至列表的示例。

HTML:
<template repeat="{{city in listOfCities | filter(searchParameter)}}">
<li>{{city}}</li>
</template>

Dart :
@observable List listOfCities = ["Chicago", "New York", "Los Angeles", "Dallas", "Denver"];

filter(term) => (listOfCities) => term.isEmpty ? listOfCities : listOfCities.where((item) => item.toLowerCase().contains(searchParameter.toLowerCase())).toList();

非常感谢任何指导,因为我已经努力了一个多星期,并且准备放弃。

谢谢!

最佳答案

以下 Polymer 数据绑定(bind)适用于 testMap3:

<table>
<thead>
<tr>
<td template repeat="{{column in testMap3['columns']}}">{{column}}</td>
</tr>
</thead>
<tbody>
<tr template repeat="{{row in testMap3['rows']}}">
<td template repeat="{{data in row.keys}}">{{row[data]}}</td>
</tr>
</tbody>
</table>

可以使用以下方法完成对表行的过滤:

filter(term) => (rows) => term.isEmpty
? rows
: rows.where((row) => row.values.any((val) => val.toLowerCase().contains(term)));

它查看整个行数据并将每一列与搜索词进行匹配。

tbody 将如下所示:

<tbody>
<tr template repeat="{{row in testMap3['rows'] | filter(search)}}">
<td template repeat="{{data in row.keys}}">{{row[data]}}</td>
</tr>
</tbody>

它假设你有一个文本输入,它连接到一个名为 search 的字符串值。 .

关于dart - map 列表中的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com