在我的站点开发中,我提供了组合框,用户可以在其中选择要显示的列,并且将根据用户的请求获取和显示数据。因此,我提供了以下组合框选择,
<div id="filterColumns" style="width: 1px; min-width: 100%;">
<oj-label for="multiSelect">Select Columns</oj-label>
<div id="columnsList">
<oj-select-many help.instruction="Select the columns to populate the data" id="multiSelect" value={{selectedColumns}} style="max-width:50em">
<oj-option value="Name">Name</oj-option>
<oj-option value="Age">Age</oj-option>
<oj-option value="Gender">Gender</oj-option>
<oj-option value="Mainden Name">Mainden Name</oj-option>
<oj-option value="Mothers Name">Mothers Name</oj-option>
<oj-option value="Designation">Designation</oj-option>
<oj-option value="Experience">Experience</oj-option>
<oj-option value="Company">Company</oj-option>
<oj-option value="Location">Location</oj-option>
</oj-select-many>
</div>
<oj-button id='filterColumnsGo' on-oj-action='[[generateData]]'>Generate Data</oj-button>
</div>
然后在ViewModel中,获取被用户选择的列名
self.selectedColumns = ko.observableArray(document.getElementById('columnsList'));
并根据选择的数据调用Elasticsearch API。
下面是一个数据的响应,
{
"_index": "person_data",
"_type": "_doc",
"_id": "moahn",
"_score": 1,
"_source": {
"person_details": {
"age": 23,
"gender": "male",
"mothers_name": "Jabito",
"mainden_name": "Rosoku",
"designation_info": {
"designation_name": "Architect",
"company": {
"company_location": "Delhi",
"experience": 4,
}
}
}
}
}
正在寻找一种以用户选择相同的顺序解析数据的方式,即在组合框中选择了列名称。我试图按如下所示进行遍历,并且对于每个循环都尝试对获取的数据进行遍历,但无法按预期工作,
self.selectedColumns().forEach(function(col){
tempCols.push({headerText: col, field: col});
...
...
});
由于Elasticsearch没有提供项目名称详细信息,因此我只能从中获得它,并且ES返回的数据是嵌套JSON格式的结果,其中的名称将与为组合框中的用户选择显示的名称不同。任何帮助将不胜感激
答案 0 :(得分:1)
执行此操作的最简单方法是使用类似于“ schema”的映射文件,在其中指定列如何与字段一对一地映射。因此,您可以执行以下操作:
ColumnDataMapping: {
"age": { field: "age", label: "Age" }
"mothersName": { field: "mothers_name", label: "Mothers Name" },
"designation": { field: "designation_info.designation_name", label: "Designation" }
"location": { field: "designation_info.company.company_location", label: "Location" }
...
}
然后在使用该映射的视图模型中,您可以获取它们所映射到的列和字段。请注意,在组合框中,您将不具有与标签相同的值。您的值将是keys
中的ColumnDataMapping
,标签将是label
字段。
这样,您可以灵活地使用代码,因为您关心的只是“模式”的正确配置。因此,您可以从代码中分离出如何映射字段等知识。
这现在还允许您存储“模式”并使其可定制。您还可以添加任何要扩展它的字段……例如enabled
的字段等。