Я создаю портлеты, и на странице может быть много экземпляров портлета, так что функции и элементы dom должны быть идентифицированы, иначе они должны начинаться с определенного пространства имен.
так что в некоторых случаях мне нужно иметь свой JS на странице JSP и не могу переместить его в отдельный файл, это очень неудобно и трудно поддерживать.
JavaScript в 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'
}
}
......
С <portlet:namespace />significanceLevel
JSP генерирует _my_namespace_significanceLevel:
.
Даже если я передам myNamespace (из JS в JSP - пространства имен, разрешенные на стороне сервера) в конструктор, я не могу создать myNamespace + 'methodName' во время выполнения
Пространство имен известно только на стороне сервера. Так что один JS всегда должен быть на странице JSP, чтобы разрешить <portlet:namespace />
, а все другие объекты JS, например, доступны через параметр конструктора.
это один из обходных путей, но его нельзя использовать во многих случаях:
window[instance._method] = function() {
instance.fileAddError.apply(instance, arguments);
};
где имя _method было объединено из строковых литералов