Короче, нет.Когда содержимое возвращается из запроса AJAX, по идее идентификаторы могут быть любыми.
Более длинный ответ заключается в том, что вы, возможно, должны структурировать свой код по-другому и создать компонент из содержимого зоны:
<div t:type="Zone" id="zone" t:id="zone">
<div t:type="MyZoneContent" t:id="myZoneContent" ... />
</div>
Затем убедитесь, что вы инициализируете свой JS с фактическим идентификатором клиента в этом новом компоненте:
public MyZoneContent implements ClientElement {
@Environmental
private JavaScriptSupport renderSupport;
/**
* An id for the component. If not specified, a default is generated.
*/
@Parameter(required = false, defaultPrefix = BindingConstants.LITERAL )
private String idParameter;
private String clientId;
@BeginRender
void setupClientId() {
this.clientId = resources.isBound("id") ? idParameter :
renderSupport.allocateClientId(resources);
}
@AfterRender
void addScript() {
this.renderSupport.addScript("new MyJavascriptClass('%s');",
this.getClientId());
}
@Override
public String getClientId() {
return this.clientId;
}
}
и шаблоном для нового компонента:
<div id="${clientId}" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<form t:type="Form" ...>
...
</form>
</div>
Таким образом, вы передаете фактический идентификатор клиента вашего компонента в ваш инициализатор Javascript, таким образом повторно инициализируя JS при каждой перезагрузке содержимого вашей Зоны.