SAPUI5 bindAggregation完成表

时间:2014-07-22 11:51:25

标签: sapui5

我将聚合绑定到表。我无法找到绑定完成后触发的事件。有" updateFinished" sap.m.List的事件,这正是我在表中寻找的(和dropodown)。我想在模型上使用attachRequestCompleted(),但该模型用于我不希望触发此事件的其他地方。

一旦表格(和下拉列表)上的数据绑定完成,是否有触发事件?

感谢任何帮助。

提前致谢。

更新:有" updateFinished"从ListBase扩展的表的事件。在发布这个问题之前,我仍然不确定我是如何错过它的。但是,问题仍然适用于下拉列表和TableSelectDialog控件。

3 个答案:

答案 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在数据仍在加载(因而没有约束)的情况下,您的表的指标,我认为最好的方法如下:

  1. 使用专用的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");
    
  2. 在您的表定义中,将busy属性绑定到{UIModel>/tableIsBusy}并将表格的属性busyIndicatorDelay设置为0以避免任何延迟< / p>

  3. 在您进行OData服务调用之前,请将属性tableBusy设置为true。这将立即显示您桌子上的繁忙叠加层:

    sap.ui.getCore().getModel("UIModel").setProperty(tableIsBusy, true);
    //here your OData read call
    
  4. 在您的OData服务requestCompleted(如果需要,也在requestFailed)事件处理程序中,将UIModel的busy属性设置为false:

    sap.ui.getCore().getModel("UIModel").setProperty(tableIsBusy, false); 
    
  5. 这种方法的最大好处是(恕我直言),而不是依靠每个控件来检查数据是否已被加载,只需在实际加载期间执行。 通过将这些与UI相关的东西绑定到(单独的)模型,可以避免编写大量额外的代码; - )

答案 2 :(得分:0)

通常,您可以通过在OData服务上使用批处理来解决问题。根据{{​​3}}:

  1. 使用OData模型v2。

    var oModel = new sap.ui.model.odata.v2.ODataModel(myServiceUrl);
    
  2. 定义一组延迟批处理组。

    oModel.setDeferredBatchGroups(["myGroupId", "myGroupId2"]);
    
  3. 将批次组信息添加到相应的绑定中,例如:

    {
      path:"/myEntities",
      parameters: {
        batchGroupId: "myGroupId"
      }
    }
    
  4. 对某个批处理组中的绑定执行的所有读取/查询操作都将保留,直到对该批处理组进行.submitChanges(.)调用。

    oModel.submitChanges({
      batchGroupId: "myGroupId",
      success: mySuccessHandler,
      error: myErrorHandler
    });
    
  5. 使用成功/错误处理程序执行操作。

    这种相当通用的方法为您提供了额外的控制,例如OData模型上的触发操作,分组和事件处理。