模組:Infobox/Provider/SMWDeferred/doc
出自幻跡百科
更多操作
此頁面為 模組:Infobox/Provider/SMWDeferred 的說明文件
SMWDeferred Provider
這是一個很小,但重要的資料 Provider。
它的工作只有一件事:
將 SMW 查詢透過 #ask + @deferred 執行。
為什麼需要它?
創作者頁面中的平台帳號是 SMW subobject。
當使用者透過表單修改帳號並按下「儲存」時,頁面本身與新的 SMW 資料是在同一輪解析流程中更新。
普通查詢可能在新資料真正可見以前就先跑掉,於是出現:
明明剛改成 B 儲存後資訊欄卻還顯示 A 重新整理才變成 B
這只是查詢時機不對。
目前已實際驗證 @deferred 能讓資訊欄在儲存後第一次顯示時就取得更新後的 subobject。
為什麼不直接用 mw.smw.ask?
SemanticScribunto 的 mw.smw.ask() 很適合一般 Lua 查詢,但這裡真正需要的是 SMW parser function 的 deferred query 行為。
因此這個 Provider 保留:
Lua Adapter
↓
SMWDeferred
↓
#ask + @deferred
而不是讓每個 Adapter 各自拼一份 deferred query。
輸入
render(frame, spec) 接收一份 query specification,其中可以包含:
conditionprintoutsparameters
Provider 最後會自動追加:
|@deferred
呼叫端不需要自己再塞一次。
責任邊界
本 Provider僅用來可靠地執行 deferred SMW query。