无法在sap.m.Select列表中设置selectedKey值?

时间:2018-11-20 14:52:13

标签: javascript select sapui5

我正在尝试将一些JSON数据绑定到一个树液选择列表中,并且工作正常,问题出在我实际上选择列表中的一个选项时,由于某种原因,未选择该选项。输入字段仅保留为空白

var oModelListMarcasTarjeta = new sap.ui.model.json.JSONModel();
oModelListMarcasTarjeta.setData({ //for implementation I am setting the data like this
  'cards': [{
    'Descrip': "",
    'Kunnr': ""
  }, {
    'Descrip': "ss",
    'Kunnr': "asf"
  }, {
    'Descrip': "fff",
    'Kunnr': "asdf"
  }, {
    'Descrip': "fas",
    'Kunnr': "asdf"
  }, {
    'Descrip': "asdfa",
    'Kunnr': "asdfwer"
  }]
});
sap.ui.getCore().setModel(oModelListMarcasTarjeta, "marcas");

//Model name for binding 
var oSelectMarca = new sap.m.Select({
  items: {
    path: "marcas>/cards",
    template: new sap.ui.core.ListItem({
      key: '{marcas>Kunnr}',
      text: '{marcas>Descrip}'
    })
   },
   selectedKey: '{Kunnr}',  //Here's my problem
 });
});

实际上,如果我从selectedKey中删除了new sap.m.Select,则我选择的选项可以正常工作,并且它们在输入中显示为选中状态,但是一旦我添加属性selectedKey,它就会损坏,无法选择任何选项。

知道为什么会发生吗?

3 个答案:

答案 0 :(得分:0)

在您的sap.m.Select-selectedKey中,您必须指定要从JSON对象中选择哪个键,现在您正在尝试选择属性Kunnr,这就是破坏性您的代码。如果您从对象中选择一个唯一属性,则也是首选,我可以看到JSON中有几个条目具有相同的Kunnr

注释:

  • 如果存在重复的密钥,则使用与该密钥匹配的第一项。
  • 如果无效或未使用selectedKey,则第一项是 已选择。
  • selectedKey无效或丢失会导致严重的功能问题 sap.m.Table,当在sap.m.Select中使用sap.m.Table时 列。

按照您的示例:

我的控制器:

        var oModelListMarcasTarjeta = this.getView().getModel("testModel");
        oModelListMarcasTarjeta.setData({
            "cards": [{
                "Descrip": "",
                "Kunnr": ""
            }, {
                "Descrip": "ss",
                "Kunnr": "asf"
            }, {
                "Descrip": "fff",
                "Kunnr": "asdf"
            }, {
                "Descrip": "fas",
                "Kunnr": "asdf"
            }, {
                "Descrip": "asdfa",
                "Kunnr": "asdfwer"
            }]
        });

我的XML视图:

<Select forceSelection="false" selectedKey="{testModel>/cards/4/Kunnr}"
   items="{ path: 'testModel>/cards', 
            sorter: { path: 'Kunnr' } }">
   <core:Item key="{testModel>Kunnr}" text="{testModel>Descrip}"/>
</Select>

请注意:selectedKey="{testModel>/cards/4/Kunnr}",这意味着将默认选择Json对象中的第5个条目。您还应该设置forceSelection="false",以提高与数据绑定的互操作性。

希望这会有所帮助!

答案 1 :(得分:0)

您还必须指定模型路径

var oSelectMarca = new sap.m.Select({
    items: {
      path: "marcas>/cards",
      template: new sap.ui.core.ListItem({
         key: '{marcas>Kunnr}',
         text: '{marcas>Descrip}'
      })
    },
    selectedKey: '{marcas>/cards/1/Kunnr}',  //Your solution 
});

答案 2 :(得分:-1)

我通过使用sap核心从外部访问属性来解决它:

var myvar = sap.ui.getCore().getModel("marcas");
var selectedKey= myvar.getProperty('/cards/Kunnr');