Sapui5 SAP UI5 XML视图数据绑定语法

Sapui5 SAP UI5 XML视图数据绑定语法,sapui5,Sapui5,我试图找出如何在控制器的onInit期间将数据绑定到sap.m.CustomListItem。我试了很多次,但似乎都不合适。在UI5演示套件中的示例上看起来非常简单 sap.ui.define([ “sap/ui/demo/toolpageapp/controller/BaseController”, “sap/m/MessageToast”, “sap/ui/model/json/JSONModel”, “sap/ui/demo/toolpageapp/model/formatter” ]

我试图找出如何在控制器的
onInit
期间将数据绑定到
sap.m.CustomListItem
。我试了很多次,但似乎都不合适。在UI5演示套件中的示例上看起来非常简单


sap.ui.define([
“sap/ui/demo/toolpageapp/controller/BaseController”,
“sap/m/MessageToast”,
“sap/ui/model/json/JSONModel”,
“sap/ui/demo/toolpageapp/model/formatter”
],函数(BaseController、MessageToast、JSONModel、格式化程序){
“严格使用”;
风险值cmisRootFolder;
儿童;
返回BaseController.extend(“sap.ui.demo.toolpageapp.controller.settings.MasterSettings”{
格式化程序:格式化程序,
onInit:function(){
getCMISFolderStructure();
var-oModel=new-JSONModel(cmisRootFolder);
这个.setModel(oModel,“文件夹”);
console.log(oModel);
函数processRootFolder(数据){
cmisRootFolder=数据;
}
函数getCMISFolderStructure(){
$.ajaxSetup({
标题:{
“访问控制允许来源”:“*”
}
});
const session=new cmis.createSession(“http://localhost:8080/myTest/browser");
session.setCredentials('test','test').getFolderTree(“rfHN5c3RlbXwxfHJlcG8xfC8=”,2{
请求:{
async:false,
成功:processRootFolder,
错误:函数(e){
如果(e)
log(false,“请求期间出错:+e”);
其他的
log(false,“请求期间出错:+e”);
}
}
})
}
},
onMasterPressed:功能(oEvent){
var oContext=oEvent.getParameter(“listItem”).getBindingContext(“side”);
var sPath=oContext.getPath()+“/selected”;
oContext.getModel().setProperty(sPath,true);
var sSelectedMasterElement=oContext.getProperty(“标题”);
var sKey=oContext.getProperty(“键”);
开关(选择的主元件){
案例“系统设置”:{
this.getRouter().navTo(sKey);
打破
}
默认值:{
MessageToast.show(已按sSelectedMasterElement+);
打破
}
}
},
OnTogglePenState:函数(oEvent){
var iItemIndex=oEvent.getParameter(“itemIndex”);
var oItemContext=oEvent.getParameter(“itemContext”);
var bExpanded=oEvent.getParameter(“扩展”);
MessageToast.show(“项索引:”+iItemIndex+
“\n项目上下文(路径):”+oItemContext+
“\n扩展:”+b扩展{
持续时间:5000,
宽度:“自动”
});
var oTree=this.byId(“树”);
var oModel=this.getView().getModel();
var sPath=oItemContext.getPath();
var bChildIsDummyNode=oModel.getProperty(sPath+“/nodes/0”).dummy==true;
if(扩展和扩展&bChildIsDummyNode){
this.loadData(oModel、sPath、oTree.getItems()[iItemIndex].getLevel());
}
},
loadData:函数(oModel、sPath、iLevel){
var oTree=this.byId(“树”);
函数processRootFolder(数据){
cmisRootFolder=数据;
}
$.ajaxSetup({
标题:{
“访问控制允许来源”:“*”
}
});
const session=new cmis.createSession(“http://localhost:8080/myTest/browser");
session.setCredentials('test','test').getFolderTree(“rfHN5c3RlbXwxfHJlcG8xfC8=”,2{
请求:{
async:false,
成功:processRootFolder,
错误:函数(e){
如果(e)
log(false,“请求期间出错:+e”);
其他的
log(false,“请求期间出错:+e”);
}
}
}),
//在本例中,我们只是假装从后端加载数据。
//oTree.setBusy(真);
setTimeout(函数(){
变量aNewNodes=[cmisRootFolder];
oModel.setProperty(sPath?sPath+“/节点”:“/”,aNewNodes);
//oTree.setBusy(假);
console.log(oModel);
}, 2000);
},
onSavePressed:function(){
MessageToast.show(“保存已按下”);
},
onCancelPressed:function(){
MessageToast.show(“按了取消”);
},
onNavButtonPress:function(){
this.getOwnerComponent().myNavBack();
}
});
});

我在网上找到了一个例子,它看起来正是我所需要的。这就是您在上面的代码示例中看到的。但是它不起作用。

你在哪里找到代码片段的?错误太多了

需要更正视图中的绑定路径。根据您的数据,它应该是
items=“{folder>/objects}”
即绝对绑定路径(缺少
后的斜杠)


根据您的数据,
properties
不是一个数组,而是一个对象,因此您不能应用类似xpath的语法,例如
/['cmis:objectId']/
。此外,您还可以使用传递给子级的上下文(由聚合绑定产生)。无需分配绝对绑定路径。
删除
后的第一个斜杠以使其相对


TL;博士 尝试:



离题,但真正需要避免的是
async:false
(在控制器中)。特别是如果你已经有了一个专门的成功管理者。发送同步XHR会冻结浏览器的UI(主)线程,从而导致错误的UX。
items="{folder>objects}"
<items items="{folder>objects}">
<CustomListItem items="{...}">
text="{folder>/object/properties/['cmis:objectId']/displayName}"