Компонент зоны изменяет идентификатор других компонентов в Tapestry 5 - PullRequest
1 голос
/ 22 декабря 2011

У меня есть компоненты from и другие внутри зоны. всякий раз, когда Zone обновляется, она также изменяет идентификатор компонента формы и других компонентов. Я использую идентификатор компонентов в JavaScript, поэтому столкнулся с проблемой, потому что Zone изменяет идентификаторы.

есть ли способ остановить это поведение Зоны в Гобелене 5.

Спасибо заранее, ребята.

С уважением,

1 Ответ

0 голосов
/ 22 декабря 2011

Короче, нет.Когда содержимое возвращается из запроса 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 при каждой перезагрузке содержимого вашей Зоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...