日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mvvm 自动绑定_ZK的实际应用:MVVM –表单绑定

發布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mvvm 自动绑定_ZK的实际应用:MVVM –表单绑定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mvvm 自動綁定

這是我們從頭開始構建ZK應用程序的第二集。 上一篇文章介紹了使用MVVM將數據加載和呈現到表中。 在本文中,我們將向您介紹ZK MVVM的表單綁定。

目的

我們將構建一個“添加”功能,使我們能夠將新條目保存到清單中。

單擊“添加”時出現表格
單擊“保存”后,將添加新條目

ZK實戰功能
?

  • MVVM:保存,表單綁定,條件綁定

使用MVVM表單綁定添加新條目

我們需要實現以下部分:

  • 增強我們的ViewModel POJO
  • 添加UI標記以呈現表單并用適當的注釋裝飾標記

ViewModel類

public class InventoryVM {private List<item> items;private Item newItem;@NotifyChange("newItem")@Commandpublic void createNewItem(){newItem = new Item("", "",0, 0,new Date());}@NotifyChange({"newItem","items"})@Commandpublic void saveItem() throws Exception{DataService.getInstance().saveItem(newItem);newItem = null;items = getItems();}@NotifyChange("newItem")@Commandpublic void cancelSave() throws Exception{newItem = null;}public List<item> getItems() throws Exception{items = DataService.getInstance().getAllItems();return items;}}
  • 第4行,我們聲明了一個名為newItem的Item對象,該對象將引用要保存到數據庫的Item實例。
  • 第6行, @ NotifyChange通知綁定程序在關聯的ViewModel屬性狀態上更新UI。
    在下面顯示的UI標記的第8行,我們有一個Groupbox并帶有visible =” @ load( 不是空的vm.newItem )注釋,因此一旦createNewItem將Item實例分配給newItem ,該Groupbox就將變為可見。
    簡而言之, @ NotifyChange會根據ViewModel屬性的更新來刷新UI。
  • 在第7行,我們用@Command注釋了createNewItem方法,在下面所示的UI標記中,在第4行,我們有了一個帶有onClick =” @ commnad(createNewItem)”的工具欄按鈕 。 因此,當單擊工具欄按鈕時,將調用createNewItem方法。
  • 類似地,從第12行到第18行,我們有一個saveItem方法,當其對應的onClick事件被觸發時將調用該方法。 將新的Item對象保存到數據庫緩存后,我們將newItem重置為null并檢索新的項目列表。 像以前一樣,使用@NotifyChange對ViewModel屬性newItem (現在再次為null)和項目 (現在具有一個額外的條目)所做的更改將反映到UI。



標記

<window apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('lab.sphota.zk.ctrl.InventoryVM')"> <toolbar><toolbarbutton label="Add" onClick="@command('createNewItem')" /> </toolbar> <groupbox form="@id('itm') @load(vm.newItem) @save(vm.newItem, before='saveItem')"visible="@load(not empty vm.newItem)"><caption label="New Item"></caption><grid width="50%"><rows><row><label value="Item Name" width="100px"></label><textbox id="name" value="@bind(itm.name)" /></row><row><label value="Model" width="100px"></label><textbox value="@bind(itm.model)" /></row><row><label value="Unit Price" width="100px"></label><decimalbox value="@bind(itm.price)" format="#,###.00"constraint="no empty, no negative" /></row><row><label value="Quantity" width="100px"></label><spinner value="@bind(itm.qty)"constraint="no empty,min 0 max 999: Quantity Must be Greater Than Zero" /></row><row><cell colspan="2" align="center"><button width="80px" label="Save"onClick="@command('saveItem')" mold="trendy" /><button width="80px" label="Cancel"onClick="@command('cancelSave')" mold="trendy" /></cell></row></rows></grid> </groupbox> <listbox> ... </listbox> </window>
  • 第1行,我們應用ZK的BindComposer的默認實現。 它負責實例化我們的ViewModel和Binder實例。
  • 第2行,我們提供了要實例化的ViewModel的完整類名,并為其提供了ID以供將來參考
  • 在第4行中,我們將ViewModel的“命令方法” createNewItem分配為工具欄按鈕的onClick事件處理程序。
  • 第6行,使用ID“ itm”使整個Groupbox中均可引用ViewModel中的newItem屬性。
  • 第6,7行通過使用表單綁定來避免將無效或不完整的數據保存到ViewModel屬性,將表單中的條目保存到一個臨時對象,直到調用命令方法saveItem 。
  • 在第8行,我們顯示了Groupbox,只有用戶單擊“ Add”按鈕時,它才能輸入新的Item條目; 依次調用createNewItem方法并為VM屬性newItem分配具有默認值(空字符串和0s)的Item實例。
  • 在第14、18、22、27行中,我們將Item屬性與輸入元素綁定在一起。 @bind實際上等效于@load@save。

簡而言之

總結點形式:

  • 使用表單綁定可避免通過將表單項保存到臨時對象來直接修改ViewModel屬性中的數據。 僅在滿足指定條件的情況下,才將數據寫入ViewModel屬性。 在我們的示例中,僅當調用saveItem方法時。
  • @Command批注允許綁定程序將UI事件處理程序映射到ViewModel命令方法。
  • @NotifyChange通知聯編程序,在執行命令方法后哪些ViewModel屬性已被修改,以便可以將數據更改反映在UI上。
  • 我們可以在運行時通過MVVM綁定將值分配給任何UI組件的屬性,以操縱諸如可見性,樣式,禁用/啟用等參數。

在本文中,我們還沒有看到如何驗證數據條目。 在此之前,我們將在下一篇文章中實現刪除和編輯功能。

參考 ZK開發人員參考

參考: ZK in Action [1]:MVVM –來自我們JCG合作伙伴 Lance Lu的Form Binding ,位于Tech Dojo博客上。


翻譯自: https://www.javacodegeeks.com/2012/07/zk-in-action-mvvm-form-binding.html

mvvm 自動綁定

總結

以上是生活随笔為你收集整理的mvvm 自动绑定_ZK的实际应用:MVVM –表单绑定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。