如何动态绑定现有的OpenUI5 Combobox?

时间:2016-02-04 10:31:03

标签: sapui5

我正在评估OpenUI5,我不清楚绑定概念。

在XML登录视图中,我想在成功登录后填充一个Combobox:

return Controller.extend("sap.ui.jorani.wt.controller.Login", {
    onCheckEmail : function () {
    var oDialog = this.getView().byId("BusyDialog");
        oDialog.open();
        var sMail = this.getView().byId("txtEmail").getValue();
        var oListInst = this.getView().byId("cboJoraniInstance");
        var aData = jQuery.ajax({
            type : 'POST',
            url : 'http://localhost/dummy/getJoraniInstances.php',
            data: {
                mail: sMail
            },
            async: false,
            success : function(data,textStatus, jqXHR) {
                //Link Combobox
                var oModel = new sap.ui.model.json.JSONModel();
                oModel.setData(data);
                oListInst.setModel(oModel);
                oListInst.bindElement("/Instances");
                oListInst.bindProperty("value", "Url");
                oListInst.bindProperty("name", "name");
                oListInst.setEnabled();
            },
            error: function (jqXHR, textStatus, errorThrown){
                MessageToast.show('An error occured');
            }
        });
        oDialog.close();
    },

因此,在我的控制器中,我创建了一个带参数的Ajax调用:

{
    "Instances": [{
        "Name": "Local",
        "IsDefault": true,
        "Url": "http:\/\/localhost\/jorani\/"
    }, {
        "Name": "D\u00e9mo",
        "IsDefault": false,
        "Url": "https:\/\/demo.jorani.org\/"
    }]
}

});

对我的网络服务的调用没问题并返回:

oListInst.placeAt("content");

代码执行时没有错误,但是我的绑定尝试没有填充控件。

我已经检查了关于这个主题的各种SO问题,他们都动态地在视图中添加了一个新的ComboBox,例如:

$.each(data.Instances, function(i, obj) {
    oListInst.addItem(new sap.ui.core.ListItem({key:obj.Url, text:obj.Name}));
});

但这不是我想要实现的,我想填充一个现有的对象。有可能吗?

关于视图,如果我使用下面的代码填充Combobox,它工作正常(但它不使用绑定功能):

{{1}}

0 个答案:

没有答案