問題
我在做練習16時(第3步的e,f),發現有一句這樣的描述:
Double click on method CONNECT_NODES.Make Value node ‘Competitors’
dependent from BTAdminH.
METHOD connect_nodes.
DATA: coll_wrapper TYPE REF TO cl_bsp_wd_collection_wrapper.
coll_wrapper = btadminh->get_collection_wrapper( ).
SET HANDLER me->competitors->on_new_focus FOR coll_wrapper ACTIVATION
iv_activate.
ENDMETHOD.
這種所謂的dependent關系我在debug時發現沒發生任何的實際效果,按理說這裡設定了handler為on_new_focus應該通過raise event來調用,但是其最後是通過直接調用方法名來調用的。你是怎麼了解的?以及這裡的所謂dependent有什麼特别的應用場景麼?
回答
UI上兩個field放到同一個header view,比如product ID和product description( 相同level),但是他們綁的Genil mode裡面的field卻不是相同level,而是存在父子關系。
這種情況下需要用到connect_nodes. 目的是parent node發生變化時,自動重新整理child node,確定ui上顯示的兩個field的value是正确的。
總之,如果UI上同一level的field來自不同的UI component context node,這些context node對應綁定到的Genil mode裡面的node之間存在父子關系,則UI component context node裡面所有的child context node都應該實作on_new_focus.
這是一個比較典型的例子:
你的疑問,我猜你是對這個例子裡面直接call event handler,而不是在代碼裡面用raise event觸發它,對吧?
你可以在connect_nodes和create_produom兩個方法裡面設定一個斷點,當你在ui上建立一個新的product時候,後者會先觸發,此時前者還未執行,是以new focus的event還未register。
而後者觸發的原因正是這個代碼裡面manual call event handler的地方:
為什麼要加21行呢?其實這就牽涉到model node和value node的差別。在product creation scenario裡面,我們期望user在ui上的輸入沒有任何錯誤之後,才會真正走完4個level,最後在DB建立product。那麼在ui 輸入通過validation之前,所有ui輸入都是存在value node裡,然後當ui的輸入通過validation 這一時間點之後,由value node轉成model node。
2743 register了2818的new focus事件
這裡2818 抛了new focus的事件,
2743 收到事件,處理:
你把你highlight的22~25注釋掉會有什麼問題?我在product的例子裡在debugger裡面跳過這行,然後再執行下去,似乎沒問題。
本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。