如何在运行时通过字符串连接创建函数或对象属性名称?
我创建了 portlet,并且页面上可能有多个 portlet 实例,因此必须标识函数和 dom 元素,也就是说它们必须以特定名称空间开头。
所以在某些情况下,我必须将我的JS放在JSP页面中并且无法将其移动到单独的文件中,这非常不方便且难以维护。
JSP 中的 javascript
var validator = new A.FormValidator({
boundingBox: document.orderForm,
validateOnBlur: true,
validateOnInput: false,
rules: {
<portlet:namespace />significanceLevel: {
digits: true
},
<portlet:namespace />languageFrom: {
required: true,
notEqualTo: '#<portlet:namespace />languageTo'
},
<portlet:namespace />languageTo: {
required: true,
notEqualTo: '#<portlet:namespace />languageFrom'
}
}
......
从
JSP 生成 _my_namespace_significanceLevel:
。 即使我将 myNamespace(来自 JSP 中的 JS - 在服务器端解析的命名空间)传递到构造函数中,我也无法在运行时创建 myNamespace + 'methodName'
命名空间仅在服务器端已知。因此,一个 JS 始终必须位于 JSP 页面中,以便解析
并且所有其他 JS 对象都可以通过构造函数参数来访问它。
这是一种解决方法,但在许多情况下无法使用:
window[instance._method] = function() {
instance.fileAddError.apply(instance, arguments);
};
其中 _method 的名称是由字符串文字连接而成的
I create portlets and there can be many instance of a portlet on a page, so that the functions and dom elements must be identified, AKA they must start with a particular namespace.
so that in some cases, I have to have my JS in a JSP page and cannot move it to a separate file, it is very inconvenient and hard to maintain.
a javascript in a JSP
var validator = new A.FormValidator({
boundingBox: document.orderForm,
validateOnBlur: true,
validateOnInput: false,
rules: {
<portlet:namespace />significanceLevel: {
digits: true
},
<portlet:namespace />languageFrom: {
required: true,
notEqualTo: '#<portlet:namespace />languageTo'
},
<portlet:namespace />languageTo: {
required: true,
notEqualTo: '#<portlet:namespace />languageFrom'
}
}
......
From <portlet:namespace />significanceLevel
JSP generates _my_namespace_significanceLevel:
.
Even if I pass myNamespace (from a JS in JSP - namespaces resolved on serverside) into a constructor, I cannot create myNamespace + 'methodName' in runtime
Namespace is only known on serverSide. So that one JS always has to be in a JSP page so that <portlet:namespace />
is resolved and all other JS objects have it accessible via constructor parameter for instance.
this is one workaround, but it cannot be used in many cases :
window[instance._method] = function() {
instance.fileAddError.apply(instance, arguments);
};
where the name of _method was concatenated from string literals
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在运行时向对象添加动态属性很容易:
因此您可以执行以下操作:
It is easy to add dynamic properties to objects during runtime:
So you could do something along the lines of: