如何将sap.ui.core模型绑定到选择列表中?

时间:2018-11-13 15:39:21

标签: javascript sapui5

需要像这样放置json数据

    {  
       "marcas":[  
          {  
             "__metadata":{  
                "id":"data id",
                "uri":"data url",
                "type":"data type"
             },
             "Codcard":"01",
             "Descript":"MasterCard"
          },
    ]
}

进入这样的选择输入...

        var oSelectMarca = new sap.m.Select({
            items: {
                path: "marcas",
                template: new sap.ui.core.ListItem({
                    key: '{Kunnr}',
                    text: '{Descrip}'
                }),
                templateShareable: true
            },
            selectedKey: '{Marca}'
        });

我正在尝试将其保存到模型中,然后如上所示调用它,

        var oModelListMarcasTarjeta = new sap.ui.model.json.JSONModel();
        var marcas = [{
                Descrip: "",
                Kunnr: ""
            }];
        var sUrlCard = "data url";
        var oDataModelCards = new sap.ui.model.odata.ODataModel(sUrlCard, true);

        oDataModelCards.read("dataCollection", {
            async: false,
            success: function(oData, response) {

                $.each(oData.results, function(i, val) {
                    marcas.push(val);
                });

                oModelListMarcasTarjeta.setData({
                    'cards': marcas
                });

                sap.ui.getCore().setModel(oModelListMarcasTarjeta, "marcas");

            }
        });

但不起作用,你知道什么是错的吗?

如果我直接将模型设置为选择输入,当然可以,但是由于某种原因,输入未设置列表中所选项目的值。

3 个答案:

答案 0 :(得分:0)

我可以通过将模型直接设置为输入来解决

    var oSelectMarca = new sap.m.Select({
        items: {
            path: "/cards",
            template: new sap.ui.core.ListItem({
                key: '{Kunnr}',
                text: '{Descrip}'
            }),
            templateShareable: true
        },
        selectedKey: '{Marca}'
    });
    oSelectMarca.setModel(oModelListMarcasTarjeta);

答案 1 :(得分:0)

上述版本的问题是您为模型marcas命名,但是在使用此模型绑定控件时没有提及它。

当您不为模型提供任何名称时(如您添加的答案),它会选择默认模型,如您在第二种情况下设置模型时所看到的那样。

如果删除模型名称,则相同的逻辑将起作用:

sap.ui.getCore().setModel(oModelListMarcasTarjeta);

但是,将模型设置在核心上根本不值得赞赏。始终根据需求在视图或控件上设置模型。

答案 2 :(得分:0)

由于您具有模型名称,因此也需要在绑定路径中使用它

假设您有来自后端的以下JSON数据。

JSON数据

{
  'cards': [{
    'Descrip': "",
    'Kunnr': ""
  }, {
    'Descrip': "ss",
    'Kunnr': "asf"
  }, {
    'Descrip': "fff",
    'Kunnr': "asdf"
  }, {
    'Descrip': "fas",
    'Kunnr': "asdf"
  }, {
    'Descrip': "asdfa",
    'Kunnr': "asdfwer"
  }]
}

绑定

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");

//Use 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}'
    })
  }
});