我已经完成了使用教程构建类似Fiori的UI的SAPUI5,并尝试添加了一个排序函数。
下拉框中填充了JSON-Model-Data的名称:
{
"SalesOrderCollection": [
{
"SoId": "300000097",
"ApprovalStatus": "",
"Status": "Initial",
"ConfirmationStatus": "",
"BillingStatus": "Initial",
...
} ...我在View中实现了这个函数,以填充下拉列表:
fillDropdown : function(evt) {
// Get current view and dropdownbox
var oView = this.getView();
var oDropdown = oView.byId("ddbox");
// Get names of nodes in model
var metaArray = Object.getOwnPropertyNames(oView.getModel()
.getProperty("/SalesOrderCollection/0"));
// Add every name to dropdownbox
var arrayLength = metaArray.length;
for ( var i = 0; i < arrayLength; i++) {
oDropdown.addItem(new sap.ui.core.ListItem("item" + i)
.setText(metaArray[i]));
}
}最后,我的问题来了:
如何在呈现视图时自动运行此函数?我知道生命周期挂钩函数onInit & onBeforeRendering,但是我不能在XML中使用它们:
我可以在这里注册UI元素的均衡器:
<uicom:DropdownBox id="ddbox" editable="true" change="handleListSort">但不是像我在这里尝试过的那样用于视图或页面:
<Page title="myPage" onBeforeRendering="fillDropdown">
<core:View controllerName="sap.ui.demo.myFiori.view.Master" (...) onBeforeRendering="fillDropdown">可能的脏解决方法:单击IconTabBar中的排序按钮时调用该函数
<IconTabBar select="fillDropdown">谢谢你的帮忙!
更新
如果我使用JavaScript而不是XML,我可以简单地在我的视图的fillDropdown函数中实现我的onAfterRendering函数。但是,为什么XML视图不抛出生命周期挂钩事件?
更新2
我也不能使用我的View的onAfterRendering;oView.getModel().getProperty("/SalesOrderCollection/0");不返回对象,因为我的模型的内容只有在钩子函数之后才可用。
发布于 2014-07-11 00:06:13
onInit、onBeforeRendering、onAfterRendering、onExit是生命周期事件。您不需要从视图中注册。当您实现独立于视图类型时,应该调用您的函数。请看这里,http://jsbin.com/hiyanuqu/1/edit
顺便说一句,sap.m库中有一个类似的内置控件,称为Input with control。https://openui5.hana.ondemand.com/test-resources/sap/m/demokit/explored/index.html#/sample/sap.m.sample.InputSuggestionsCustomFilter
https://stackoverflow.com/questions/24672554
复制相似问题