2013-04-10 2 views
1

У меня есть вкладка с несколькими элементами. Мне нужно обновить данные, когда пользователь нажимает на вкладку. У меня есть команда click, которая выполняет обновление в контейнере, но я не могу создать обновление страницы. Это пример пункта .zul страницы:Как обновить данные по элементу элемента табуляции?

<row valign="top"> 
    <label value="Title with diacritics" zclass="field_label"/> 
    <textbox value="@{main$composer.inventory.titleTranslitDcr, is-live=true}" hflex="1"/> 
</row> 

Это как эти данные, которые я попытался установить в бобе:

public void populateTitleStatementFields() 
{ 
    this.titleTranslitDcr = Commons.getString(context, "/xml/TitleTranslitDCR", EMPTY); 
} 

я уверен, что в этом коде у меня есть действительное значение строки. Но ничего не работает до полной перезагрузки с помощью F5.

Что касается образцов - у меня есть более 50 полей, которые я должен обновить в 5 штук. Я проверил это, открыв две страницы - при одном я сохранил данные в db, на другой вкладке изменений и искал изменения, но ничего не произошло, даже если я получил правильное значение из db (которое было изменено в другом экземпляре браузера) EDIT 11.04 .2013:

Нашел что-то близкое к этому. Перезагрузка страницы .zul из события onclick в учебнике, но я думаю, что я должен объединить ее с @Command. Есть ли способ сделать это, чтобы проверить, будет ли это работать?

ответ

1

Вы можете сделать это с ZK MVVM, как показано ниже:

test.zul

<zk> 
    <div apply="org.zkoss.bind.BindComposer" 
     viewModel="@id('vm') @init('test.TestVM')"> 
     <tabbox onSelect="@command('updateData')"> 
      <tabs> 
       <tab label="tab 1" /> 
       <tab label="tab 2" /> 
      </tabs> 
      <tabpanels> 
       <tabpanel> 
        <label value="@load(vm.dataOne)" /> 
       </tabpanel> 
       <tabpanel> 
        <label value="@load(vm.dataTwo)" /> 
       </tabpanel> 
      </tabpanels> 
     </tabbox> 
    </div> 
</zk> 

TestVM.java

package test; 

import org.zkoss.bind.annotation.Command; 
import org.zkoss.bind.annotation.NotifyChange; 


public class TestVM { 
    public String getDataOne() { 
     return System.currentTimeMillis() % 19 + ""; 
    } 
    public String getDataTwo() { 
     return System.currentTimeMillis() % 91 + ""; 
    } 
    @Command 
    @NotifyChange({"dataOne", "dataTwo"}) 
    public void updateData() { 

    } 
} 
Смежные вопросы