Jump to content
切換選單
切換偏好設定選單
切換個人選單
尚未登入
如果您進行編輯,系統將會為您建立一個臨時帳戶。

模組: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,其中可以包含:

  • condition
  • printouts
  • parameters

Provider 最後會自動追加:

|@deferred

呼叫端不需要自己再塞一次。

責任邊界

本 Provider僅用來可靠地執行 deferred SMW query。