SAP UI5 SmartTable.prototype._onMetadataInitialised 方法的深入介绍

简介: SAP UI5 SmartTable.prototype._onMetadataInitialised 方法的深入介绍

源代码:

SmartTable.prototype._onMetadataInitialised = function() {
    this._bMetaModelLoadAttached = false;
    if (this.bIsInitialised) {
      return;
    }
    this._bUseColumnLabelsAsTooltips = this.getUseColumnLabelsAsTooltips(); // keep value stable after initialization
    // Check whether further custom columns where added in the meantime
    this._updateInitialColumns();
    this._fireBeforeInitialiseAndValidate();
    this._validateCustomizeConfig(this.getCustomizeConfig());
    this._createTableProvider();
    if (!this._oTableProvider) {
      return;
    }
    this._aTableViewMetadata = this._oTableProvider.getTableViewMetadata();
    if (!this._aTableViewMetadata) {
      return;
    }
    if (this._bUseColumnLabelsAsTooltips) {
      this._oTable.getColumns().forEach(function(oColumn) {
        var oHeader = null;
        if (oColumn.getHeader) {
          oHeader = oColumn.getHeader();
        } else if (oColumn.getLabel) {
          oHeader = oColumn.getLabel();
        }
        var oLabel = oHeader && oHeader.isA && (oHeader.isA("sap.m.Label") || oHeader.isA("sap.m.Text")) ? oHeader : null;
        var oTooltipTarget = this._isMobileTable ? oLabel : oColumn;
        var oTooltip = oTooltipTarget ? oTooltipTarget.getTooltip() : null;
        if (oTooltipTarget && oLabel && !oTooltip && !oTooltipTarget.isBound("tooltip")) {
          if (oLabel.isBound("text")) {
            var oBindingInfo = _getClonedBindingInfo(oLabel.getBindingInfo("text"));
            oTooltipTarget.bindProperty("tooltip", oBindingInfo);
          } else {
            oTooltipTarget.setTooltip(oLabel.getText());
          }
        }
      }, this);
    }
    // Set width for custom columns after metadata is initialized
    if (this.getEnableAutoColumnWidth()) {
      this._oTable.getColumns().forEach(this._setWidthForCustomColumn, this);
    }
    if (!this._isMobileTable && this.getDemandPopin()) {
      this.setDemandPopin(false);
      Log.error("use SmartTable property 'demandPopin' only  with responsive table, property has been set to false");
    }
    this.detachModelContextChange(this._initialiseMetadata, this);
    // Indicates the control is initialised and can be used in the initialise event/otherwise!
    this.bIsInitialised = true;
    delete this._bInitialising;
    this._updateP13nDialogSettings(true);
    this._bTableSupportsExcelExport = this._oTableProvider.getSupportsExcelExport();
    this._bMultiUnitBehaviorEnabled = this._oTableProvider.getMultiUnitBehaviorEnabled();
    this._listenToSmartFilter();
    this._createVariantManagementControl(); // creates VariantMngmntCtrl if useVariantManagement OR useTablePersonalisation is true.
    // Control is only added to toolbar if useVariantManagement is set otherwise it acts as
    // hidden persistance helper
    this._createToolbarContent();
    this._applyToolbarContentOrder();
    this._aAlwaysSelect = this._oTableProvider.getRequestAtLeastFields();
    this._createContent();
    this._createPersonalizationController();
    // Create a local JSONModel to handle editable switch
    this._oEditModel = new JSONModel({
      editable: this.getEditable()
    });
    // Set the local model on the SmartTable
    this.setModel(this._oEditModel, "sm4rtM0d3l");
    this.attachEvent("_change", this._onPropertyChange, this);
    this.fireInitialise();
    // Trigger initial binding if no Variant exists -or- if it is already initialised
    if (!this._oVariantManagement || (this._oVariantManagement && this._bVariantInitialised)) {
      this._checkAndTriggerBinding();
    }
  };

解析 SmartTable.prototype._onMetadataInitialised 函数

该函数是 SAP UI5 中 SmartTable 控件的一个方法,主要负责在元数据初始化完成后设置表格的一些核心功能和行为。此方法是内部方法,通常在控件初始化过程中自动调用。

元数据初始化后的处理
  • 标记元数据加载状态:函数开始时,将 _bMetaModelLoadAttached 标记为 false,表示不再监听元数据加载事件。
  • 初始化检查:通过 bIsInitialised 标记确保控件不会被重复初始化。
配置列标签作为工具提示
  • 使用列标签作为工具提示_bUseColumnLabelsAsTooltips 标记根据 getUseColumnLabelsAsTooltips() 方法的返回值设置,决定是否将列的标签用作鼠标悬停时的工具提示。
更新和验证自定义配置
  • 更新初始列_updateInitialColumns() 方法检查是否有新的自定义列被添加,并进行更新。
  • 触发初始化前事件并验证自定义配置:通过 _fireBeforeInitialiseAndValidate()_validateCustomizeConfig() 方法,分别触发初始化前的事件和验证自定义配置。
创建表格提供者
  • 表格提供者创建_createTableProvider() 方法负责创建表格数据的提供者,这是一个关键步骤,因为表格提供者负责获取和处理表格所需的数据和元数据。
配置列的工具提示
  • 为列设置工具提示:如果 _bUseColumnLabelsAsTooltips 为真,遍历表格的列,为每个列配置工具提示。此过程涉及到判断列头部是否存在,是否为 sap.m.Labelsap.m.Text 实例,并据此决定是否为其设置工具提示。
自动列宽和 Pop-in 设置
  • 设置自定义列宽度:如果启用了自动列宽 (getEnableAutoColumnWidth()),则为每个自定义列设置宽度。
  • 调整 Pop-in 设置:对于非移动表格,如果设置了 getDemandPopin(),则关闭此功能并记录错误。
其他初始化操作
  • 移除模型上下文变化监听标记控件初始化完成更新个性化对话框设置检查 Excel 导出和多单位行为支持侦听智能筛选器变体管理和工具栏内容创建,以及设置本地编辑模型,都是初始化过程的一部分,确保 SmartTable 控件完全配置并准备好与用户交互。
事件绑定和初始绑定触发
  • 绑定属性变化事件:通过 attachEvent 方法监听 _change 事件,以便在控件属性发生变化时做出响应。
  • 触发初始化完成事件:通过 fireInitialise() 方法向外界通知控件已完成初始化。
  • 触发初始数据绑定:最后,检查变体管理状态,并根据需要触发数据绑定,以确保表格加载显示数据。

总结

上述解释尝试深入分析了 SmartTable.prototype._onMetadataInitialised 方法的关键部分和执行逻辑。每个步骤都旨在确保 SmartTable 控件能够根据提供的配置和元数据正确初始化,提供灵活的个性化设置,并为最终用户呈现丰富、互动的数据表格视图。通过这种方式,SAP UI5 框架提供了强大的工具,支持开发人员创建高度定制的应用程序视图,满足复杂的业务需求。

请注意,这只是一个初步的概述,旨在提供对 SmartTable.prototype._onMetadataInitialised 方法功能和重要性的理解。在实际的 SAP UI5 项目开发中,深入理解各种控件的内部工作原理对于构建高效、可维护的应用程序至关重要。

相关文章
|
23天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
52 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
1月前
|
JSON 前端开发 测试技术
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍
SAP UI5 sap.ui.core.util.MockServer.simulate 方法介绍
21 0
|
1月前
|
JSON 前端开发 开发者
sap.ui.model.Model.checkUpdate 方法介绍
sap.ui.model.Model.checkUpdate 方法介绍
11 0
|
1月前
|
存储 JSON 供应链
sap.ui.model.Model.refresh 方法介绍
sap.ui.model.Model.refresh 方法介绍
38 0
|
17天前
|
小程序
【微信小程序6】引入第三方UI的方法(ColorUi)
【微信小程序6】引入第三方UI的方法(ColorUi)
17 0
|
3月前
|
Web App开发 存储 前端开发
谈谈企业级应用的自定义 UI 创建和集成方法一览
谈谈企业级应用的自定义 UI 创建和集成方法一览
31 0
|
5月前
|
开发者
SAP UI5 控件双向数据绑定后显示数据出问题,可以调试这个方法
SAP UI5 控件双向数据绑定后显示数据出问题,可以调试这个方法
28 0
|
5月前
|
JSON JavaScript 前端开发
一种在 ABAP 端扩展 SAP Fiori 应用的方法介绍
一种在 ABAP 端扩展 SAP Fiori 应用的方法介绍
30 0
|
5月前
|
前端开发
element-ui图标偶现乱码问题的原因和修复方法
之前很老的一个 webpack3 前端项目,用 vue-cli5 重构了一下,根据 vue-cli 文档安装的 sass 版本 ^1.32.7,sass-loader 版本 ^12.0.0,各种自测感觉没问题了就部署到线上了
92 0
|
6月前
|
缓存
SAP UI5 OData 请求的自定义 HTTP header 设置方法
SAP UI5 OData 请求的自定义 HTTP header 设置方法
38 0

热门文章

最新文章