我将聚合绑定到表。我无法找到绑定完成后触发的事件。有" updateFinished" sap.m.List的事件,这正是我在表中寻找的(和dropodown)。我想在模型上使用attachRequestCompleted(),但该模型用于我不希望触发此事件的其他地方。
一旦表格(和下拉列表)上的数据绑定完成,是否有触发事件?
感谢任何帮助。
提前致谢。
更新:有" updateFinished"从ListBase扩展的表的事件。在发布这个问题之前,我仍然不确定我是如何错过它的。但是,问题仍然适用于下拉列表和TableSelectDialog控件。
答案 0 :(得分:1)
我也偶然发现了这个问题,但是在另一个上下文中。 我有一个Grid布局,我通过oData Model动态加载Panel。
因此我在XML Grid-View元素中输入了路径。
<l:Grid id="grid" content="{some path...}">...</l:Grid>
现在我想设置网格视图忙,加载数据时还原它。
因此我使用网格视图的绑定。 在Controllers onInit方法中,我添加了:
this._oGrid = this.getView().byId("grid");
this.getRouter().attachRouteMatched(this._onRouteMatch.bind(this));
请注意,每个浏览器都不提供绑定方法。您需要应用polyfill。 (见https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
Bind也与绑定无关:D
我需要这样做,因为onInit函数中没有Binding。
_onRouteMatched函数:
var oContent = this._oGrid.getBinding("content");
oContent.attachDataReceived(function(oData) {
this._oGrid.setBusy(false);
}.bind(this));
现在收到数据时,busy选项设置为false。
答案 1 :(得分:0)
如果您想要显示“正在加载”#39在数据仍在加载(因而没有约束)的情况下,您的表的指标,我认为最好的方法如下:
使用专用的JSONModel,它只包含特定于UI的内容,例如切换控件的enabled / readonly / busy / etc属性。
在您的情况下,例如:
var oUIModelData = {
tableIsBusy : false,
//etc, things like :
btnSubmitEnabled : false,
someControlVisible : true
};
var oUIModel = new sap.ui.model.json.JSONModel();
oUIModel.setData(oUIModelData);
sap.ui.getCore().setModel(oUIModel, "UIModel");
在您的表定义中,将busy
属性绑定到{UIModel>/tableIsBusy}
并将表格的属性busyIndicatorDelay
设置为0
以避免任何延迟< / p>
在您进行OData服务调用之前,请将属性tableBusy
设置为true
。这将立即显示您桌子上的繁忙叠加层:
sap.ui.getCore().getModel("UIModel").setProperty(tableIsBusy, true);
//here your OData read call
在您的OData服务requestCompleted
(如果需要,也在requestFailed
)事件处理程序中,将UIModel的busy属性设置为false:
sap.ui.getCore().getModel("UIModel").setProperty(tableIsBusy, false);
这种方法的最大好处是(恕我直言),而不是依靠每个控件来检查数据是否已被加载,只需在实际加载期间执行。 通过将这些与UI相关的东西绑定到(单独的)模型,可以避免编写大量额外的代码; - )
答案 2 :(得分:0)
通常,您可以通过在OData服务上使用批处理来解决问题。根据{{3}}:
使用OData模型v2。
var oModel = new sap.ui.model.odata.v2.ODataModel(myServiceUrl);
定义一组延迟批处理组。
oModel.setDeferredBatchGroups(["myGroupId", "myGroupId2"]);
将批次组信息添加到相应的绑定中,例如:
{
path:"/myEntities",
parameters: {
batchGroupId: "myGroupId"
}
}
对某个批处理组中的绑定执行的所有读取/查询操作都将保留,直到对该批处理组进行.submitChanges(.)
调用。
oModel.submitChanges({
batchGroupId: "myGroupId",
success: mySuccessHandler,
error: myErrorHandler
});
使用成功/错误处理程序执行操作。
这种相当通用的方法为您提供了额外的控制,例如OData模型上的触发操作,分组和事件处理。