等待绑定模型更改后呈现的sap.ui.table.Table

时间:2016-06-23 09:25:45

标签: sapui5

我有sap.ui.table.Table哪些行绑定到JSONModel。

var oListModel = new sap.ui.model.json.JSONModel(); //oTable created here (sap.ui.table.Table) oTable.setModel(oListModel); oTable.bindRows("/");

当呈现表时,即为该表创建DOM时,我需要引用DOM以将DOM元素(表行)传递给库,这将使它们可拖动。

我的问题是:我如何知道在更改模型并重新呈现表之后何时创建表的DOM?我找不到任何听众。视图控制器的监听器onAfterRendering()对我没有帮助。

在XMLHTTPRequest成功后,模型将填充数据。当我在xht请求的成功处理程序中设置模型并尝试直接访问DOM元素时,它们还不存在。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以添加活动代理

var oMyTable = new sap.ui.table.Table();
oMyTable.addEventDelegate({
   onAfterRendering: function() {
      $table = this.getDomRef() ....
   }
});

更好的方法是扩展控件,请参阅Using addDelegate to extend a control to use third party functionality

UPDATE 该博客中的示例不再有效fixed here

答案 1 :(得分:0)

最近我遇到了一个类似的问题,我必须在智能形式(存在元素的地方)之后访问一个元素。我发布了我的查询here以及我的最终解决方案(基于@Dopedev的接受答案)。我正在使用XML视图 - 包括嵌套的XML视图 - 但是onAfterRendering对我来说也没有帮助。

我想你可以看看这个解决方案 - 就像在接受的答案中提到的那样,它可能不是最佳解决方案,但它确实有效。在我的情况下,DOMNodeInserted的绑定没有太大的性能问题,因为它在嵌套视图的onAfterRendering中被调用,该嵌套视图仅包含smartform并且在找到时立即取消绑定。

条件if (id === "yourtableid") { }应足以识别并传递。由于您有一个表,因此有几个子节点,因此此时必须解除绑定。

Mutation Observer是首选方法,但我想您可能需要检查页面末尾的浏览器兼容性表,看它是否符合您的要求。有一个例子here。我之前使用过Mutation Observer(在SAPUI5 / openUI5环境之外),发现监听DOM插入事件非常方便(并且非常方便)。事实上,sap.ui.dt包由MutationObserver.js

组成