使用所有关键元素设置MulticomboBox

时间:2015-10-20 07:17:35

标签: sapui5

我有一个multicomboBox,我想将multicomboBox与json中的所有键绑定。我使用XML视图。 我需要multicomboBox,其值为productId,name,category,suppliername ..as follow

我的xml视图

<MultiComboBox selectionChange="handleSelectionChange" selectionFinish="handleSelectionFinish" width="300px"  
  items="{  
                    path: '/Collection',  
                     sorter: { path: 'Name' }  
                }">  

  <core:Item key="{ProductId}" text="{Name}" />  
        </MultiComboBox> 

我的json文件

{
  "Collection": [
  {
  "ProductId": "1",
  "Name": "A",
  "Category": "Projector",
  "SupplierName": "Titanium",
  "Description": "A very powerful projector with special features for Internet usability, USB",
  "WeightMeasure": 1467,
  "WeightUnit": "g",
  "Price": 856.49,
  "CurrencyCode": "EUR",
  "Status": "Available",
  "Quantity": 3,
  "UoM": "PC",
  "Width": 51,
  "Depth": 42,
  "Height": 18,
  "DimUnit": "cm"

  },
  {
  "ProductId": "2",
  "Name": "B",
  "Category": "Graphics Card",
  "SupplierName": "Technocom",
  "Description": "Gladiator MX: DDR2 RoHS 128MB Supporting 512MB Clock rate: 350 MHz Memory Clock: 533 MHz, Bus Type: PCI-Express, Memory Type: DDR2 Memory Bus: 32-bit Highlighted Features: DVI Out, TV Out , HDTV",
  "WeightMeasure": 321,
  "WeightUnit": "g",
  "Price": 81.7,
  "CurrencyCode": "EUR",
  "Status": "Discontinued",
  "Quantity": 10,
  "UoM": "PC",
  "Width": 34,
  "Depth": 14,
  "Height": 2,
  "DimUnit": "cm"
  },
  {
  "ProductId": "3",
  "Name": "C",
  "Category": "Graphics Card",
  "SupplierName": "Red Point Stores",
  "Description": "Hurricane GX: DDR2 RoHS 512MB Supporting 1024MB Clock rate: 550 MHz Memory Clock: 933 MHz, Bus Type: PCI-Express, Memory Type: DDR2 Memory Bus: 64-bit Highlighted Features: DVI Out, TV-In, TV-Out, HDTV",
  "WeightMeasure": 588,
  "WeightUnit": "g",
  "Price": 219,
  "CurrencyCode": "EUR",
  "Status": "Out of Stock",
  "Quantity": 25,
  "UoM": "PC",
  "Width": 34,
  "Depth": 14,
  "Height": 2,
  "DimUnit": "cm"
  },
  {
  "ProductId": "4",
  "Name": "D",
  "Category": "Accessory",
  "SupplierName": "Technocom",
  "Description": "Web camera, color, High-Speed USB",
  "WeightMeasure": 700,
  "WeightUnit": "g",
  "Price": 59,
  "CurrencyCode": "EUR",
  "Status": "Available",
  "Quantity": 22,
  "UoM": "PC",
  "Width": 18,
  "Depth": 19,
  "Height": 21,
  "DimUnit": "cm"
  },
  {
  "ProductId": "5",
  "Name": "E",
  "Category": "Accessory",
  "SupplierName": "Technocom",
  "Description": "Lock for Monitor",
  "WeightMeasure": 40,
  "WeightUnit": "g",
  "Price": 13.49,
  "CurrencyCode": "EUR",
  "Status": "Available",
  "Quantity": 30,
  "UoM": "PC",
  "Width": 11,
  "Depth": 11,
  "Height": 3,
  "DimUnit": "cm"
  }
  ]
}

2 个答案:

答案 0 :(得分:1)

我不认为可以在不创建新数据对象的情况下执行您要求的操作,其中原始对象的键将变为值。

在这里我将如何做(虽然我不太多使用xml视图):

<core:View 
    controllerName="local.controller"
    xmlns:mvc="sap.ui.core.mvc"
    xmlns:core="sap.ui.core"
    xmlns="sap.m">
    <MultiComboBox width="300px"  
        items="{  
        path: '/data',  
    }">  

        <core:Item text="{value}" />  
    </MultiComboBox> 
</core:View> 

在控制器中我们制作一个新的对象和模型:

var oModelData={};
oModelData.data = [];
for(var key in oData.Collection[0]){
    var oObj = {};
    oObj.value = key;
    oModelData.data.push(oObj);
}

oView.setModel(new sap.ui.model.json.JSONModel(oModelData));

这是一个有效的JSBIN示例:LINK

答案 1 :(得分:0)

也许是错过了重点,但您发布的原始代码应该可以正常工作。你想要的是什么?