我有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元素时,它们还不存在。
感谢您的帮助!
答案 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
组成