- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在我的 Vue.js 应用程序中使用 iView UI 套件表,该应用程序使用带有 axios 的 Elasticsearch API。我的问题是我似乎无法访问嵌套的搜索响应对象,它是一个数组列表对象。我只能访问第一级字段,但不能访问嵌套字段。不知道在iView表格中如何设置表格行键。
这是我的 axios 调用和映射器方法的样子:
listObjects(pageNumber){
const self = this
self.$Loading.start()
self.axios.get("/api/elasticsearch/")
.then(response => {
self.ajaxTableData = self.mapObjectToArray(response.data);
self.dataCount = self.ajaxTableData.length;
if(self.ajaxTableData.length < self.pageSize){
self.tableData = self.ajaxTableData;
} else {
self.tableData = self.ajaxTableData.slice(0,self.pageSize);
}
self.$Loading.finish()
})
.catch(e => {
self.tableData = []
self.$Loading.error()
self.errors.push(e)
})
},
mapObjectToArray(data){
var mappedData = Object.keys(data).map(key => {
return data[key];
})
return mappedData
},
iView 表格列如下所示:
tableColumns: [
{
title: 'Study Date',
key: 'patientStudy.studyDate',
width: 140,
sortable: true,
sortType: 'desc'
},
{
title: 'Modality',
key: "generalSeries.modality",
width: 140,
sortable: true
},
...
]
(原始)Elasticsearch 文档如下所示:
[
{ "score":1, "id":"3a710fa2c1b3f6125fc168c9308531b59e21d6b3",
"type":"dicom", "nestedIdentity":null, "version":-1, "fields":{
"highlightFields":{
},
"sortValues":[
],
"matchedQueries":[
],
"explanation":null,
"shard":null,
"index":"dicomdata",
"clusterAlias":null,
"sourceAsMap":{
"generalSeries":[
{
"seriesInstanceUid":"999.999.2.19960619.163000.1",
"modality":"MR",
"studyInstanceUid":"999.999.2.19960619.163000",
"seriesNumber":"1"
}
],
"patientStudy":[
{
"studyDate":"19990608"
}
]
}
}]
这是消费对象的样子:
如您所见,我需要访问的字段位于“sourceAsMap”对象内,然后嵌套在数组中。如何提供 iView 表格单元格键来访问它们?
更新:我现在“重新映射”了我的 Elasticsearch 对象,然后再将它显示在 Vue.js 表中,现在它可以工作了。但是,我不认为我这样做的方式非常优雅或干净......也许你可以帮助我以更好的方式做到这一点。这是我重新映射对象的方法:
getData(data){
let jsonMapped = []
for(let i = 0; i < data.length; i++){
let id = {}
id['id'] = data[i].id
let generalData = data[i]['sourceAsMap']['generalData'][0]
let generalSeries = data[i]['sourceAsMap']['generalSeries'][0]
let generalImage = data[i]['sourceAsMap']['generalImage'][0]
let generalEquipment = data[i]['sourceAsMap']['generalEquipment'][0]
let patient = data[i]['sourceAsMap']['patient'][0]
let patientStudy = data[i]['sourceAsMap']['patientStudy'][0]
let contrastBolus = data[i]['sourceAsMap']['contrastBolus'][0]
let specimen = data[i]['sourceAsMap']['specimen'][0]
jsonMapped[i] = Object.assign({}, id, generalData, generalSeries, generalImage, generalEquipment, patient,
patientStudy, contrastBolus, specimen)
}
return jsonMapped
},
结果是这样的:
虽然它现在可以工作了,但我该如何优化这段代码?
最佳答案
一些功能可以帮助您解决问题
let data = [{
key1: ['k1'],
key2: ['k2'],
key3: [{
subKey1: 'sk1',
subKey2: ['sk2'],
subObject: [{ name: 'John', surname: 'Doe' }],
items: [1, 2, 3, 5, 7]
}]
}];
function mapIt(data) {
if (isSingletonArray(data)) {
data = data[0];
}
for(const key in data) {
if (isSingletonArray(data[key])) {
data[key] = mapIt(data[key][0]);
} else {
data[key] = data[key];
}
}
return data;
}
function isSingletonArray(obj) {
return typeof obj === 'object' && Array.isArray(obj) && obj.length === 1;
}
console.log(mapIt(data));
输出:
{
key1: 'k1',
key2: 'k2',
key3: {
subKey1: 'sk1',
subKey2: 'sk2',
subObject: { name: 'John', surname: 'Doe' },
items: [ 1, 2, 3, 5, 7 ]
}
}
您可以在浏览器中查看。 mapIt
将单例数组解包为对象或基元。但我建议您注意 javascript 的特殊弹性客户端库。它可以让您免于编写额外的代码。
关于Vue.js with iView Table - 访问 Elasticsearch 搜索响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52270829/
这是 MVVM + WPF,但实际上与这些工具没有太大关系。问题比较笼统,属于OO设计。 昨天 MarcinJuraszek 帮助我提出了一个很好的解决方案来解决 original problem .
有谁知道为什么 iView 管理模板只能缩放到预设高度?谁能帮我将管理员的高度设置为完整的浏览器(100vh 或 100%)? 提前谢谢你。 网站上的示例显示了预定义的 minHeight: 200p
我正在尝试设计一种方法来执行非常简单的 asp.net mvc 插件,但主要是我试图了解 View 渲染的工作原理。 我已经将我的问题归结为这个 public class CustomView : I
1、假设我要隐藏columns里的 “账户组名称” ? 1
我正在尝试在 iView ui 中应用单击事件。这是我正在尝试的: Mark as read markAsRead 方法未运行。我怎样才能让它运行? 最佳答案 来自iView docum
我正在尝试在 main.js 中使用 Webpack 在我的 VueJS 项目上导入 iView UI。 从“iview”导入 iView 然后: Vue.use(iView) 控制台显示错误消息 U
当我尝试运行 Oleview 时,我收到一条错误消息,指出 IViewer.dll 的 DllRegisterServer 失败(抱歉,我想发布屏幕截图,但直到获得 10 信誉 =p 后才能发布) O
有人曾经将图像动态加载到 jquery iViewer 中吗?目前,它的设置为 $(document).ready(function(){ $("#images").i
我正在使用 iviewer用于缩放图像。有一个旋转功能可以在两个方向上旋转图像。 在 Google chrome 中,当您向任意方向旋转图像,然后尝试放大和缩小时,容器中的空白区域会出现一些边框类型的
我用的是Vue的单文件组件,想试试iView UI框架。考虑有以下代码: 然后我想改变输入的宽度。例如,检查更改是否生效: input { width: 10px; }
我正在尝试为 iView ui Multiple select 添加限制。这是代码 {{option.label}} 我想添加类似这样的max="3"来限制选中的项目 在 api 文档中
我这样做的目的是将字符串渲染到 View 中。这就是我所做的: public string RenderRazorViewToString(string viewName, object model,
我正在使用“Vue.js”创建一个阿拉伯语网站,我将 iView 用于 UI 组件,但问题是它是为 LTR 布局设计的,而阿拉伯语是 RTL。 如何将 iView 组件转换为 RTL? 示例:我想在这
我想在 iView UI 中设计一个表,它会根据我的条件填充数据。这些行将具有折叠图标,该图标将根据我的情况隐藏/显示一些行。这是显示概念的图像: 如何(严格)使用 iView table 实现? 最
我在我的 Vue.js 应用程序中使用 iView UI 套件表,该应用程序使用带有 axios 的 Elasticsearch API。我的问题是我似乎无法访问嵌套的搜索响应对象,它是一个数组列表对
我在 Splunk HTML 仪表板中使用 Bootstrap 模式创建了一个弹出窗口。弹出窗口效果很好,但其中的 iviewer 存在一些问题。 iviewer 不知何故认为它的大小和位置不真实。当
我需要有关模态的帮助,昨天我试图解决这个问题,但后来情况变得更糟。所以请任何帮助将不胜感激。我有一个父组件,里面有一个模态(子组件) 在我的父代码中: Press me {
DEMO 我在 iviewer 中有以下代码。在这里我想显示要填充整个灰色框的图像。 HTML: JS: var $ = jQuery; $(document).ready(function
我正在启动一个 WPF 应用程序。我使用 Prism 及其 ViewLocator。 这意味着当我有一个必须绑定(bind) ViewModel 的 View 时,我必须在其上指示 mvvm:View
是否有 System.Web.Mvc.IView.Render() 的示例实现可供我用作模板? 最佳答案 还没有。当您实现 IView 时,您应该为您的产品起一个好名字(例如 Razor、Knight
我是一名优秀的程序员,十分优秀!