如何在代码中跟踪JavaScript动态创建的元素的起源?
有一个SAPUI5应用程序。由xml创建的Html视图。JavaScript控制器。此应用程序的某些元素(例如按钮)是在各个视图的控制器中动态创建的。也就是说,无法使用元素的id在控制器中获取它,因为id是动态创建的。希望获取应用程序中动态创建的元素来修改它们,例如修改按钮。将动态创建的元素追溯到其创建代码的最佳方法是什么?例如,如何在JavaScript控制器中追溯按钮的来源?这是一个巨大的应用程序,一个视图有多个控制器。我不只是懒惰如何在代码中跟踪JavaScript动态创建的元素的起源?,javascript,html,debugging,google-chrome-devtools,sapui5,Javascript,Html,Debugging,Google Chrome Devtools,Sapui5,有一个SAPUI5应用程序。由xml创建的Html视图。JavaScript控制器。此应用程序的某些元素(例如按钮)是在各个视图的控制器中动态创建的。也就是说,无法使用元素的id在控制器中获取它,因为id是动态创建的。希望获取应用程序中动态创建的元素来修改它们,例如修改按钮。将动态创建的元素追溯到其创建代码的最佳方法是什么?例如,如何在JavaScript控制器中追溯按钮的来源?这是一个巨大的应用程序,一个视图有多个控制器。我不只是懒惰 组件的renderer类中的render函数是(最终)创建
组件的renderer类中的
render
函数是(最终)创建DOM元素的函数。您可以向其中插入调试器语句,如下所示:
let __buttonRender = sap.m.ButtonRenderer.render;
sap.m.ButtonRenderer.render = function() {
let control = arguments[1];
console.log('Creating button: ', control.sId);
debugger;
return __buttonRender.apply(this, arguments);
}
您可能可以根据此处的Id修改控件对象。我不确定你的最终目标是什么。渲染器可能从XML中获取属性和数据,因此如果您想修改按钮,我会在数据源中进行修改。上述方法可以让您在模型到达DOM之前对其进行黑客攻击,但这有点令人讨厌。您不能。完成的元素和它的创建方式之间没有关系。它要么在DOM中,要么不在DOM中,这就是它的全部内容。它可能是手工编写的,也可能是由服务器端或客户端代码创建的,但是您无法判断,除非创建它的代码添加了一些自定义属性来表示这一点。你所能做的就是一步一步地浏览代码,或者把它缩小到构造那种类型的元素的地方,或者别的什么地方。这是一个小问题。如果我可以问,你对一些自定义属性了解多少?我不知道,这不太可能,但也许他们可以编写
。就像我说的,我从来没有见过这样做,但是如果你想在你的代码中有这样的可追溯性,你可以控制创建元素的代码,你可以让它这样写不幸的是,只需要在代码中找到那些元素。没有为此应用程序编写一行代码。我想我别无选择,只能跳过代码。无论如何,谢谢您如果它们是动态创建的,您可以尝试在源代码中搜索“new Button”
或“new sap.m.Button”
。在每个按钮的构造函数中添加自定义类或其他自定义属性,直到找到所需按钮的构造函数。