我正在评估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}}