當提供的儲存和模組不符合您的解決方案需求時,定義新類型的ContextHub儲存和模組。
ContextHub存放區是根據註冊存放區候選項目建立。 若要建立自訂商店,您需要建立並註冊商店候選商店。
包含建立和註冊儲存候選項的代碼的javascript檔案必須包含在客戶端庫資料夾中。 資料夾的類別必須符合下列模式:
contexthub.store.[storeType]
類別的[storeType]
部分是註冊儲存候選項的storeType
。 (請參閱註冊ContextHub儲存候選項)。 例如,對於contexthub.mystore
的storeType,客戶端庫資料夾的類別必須為contexthub.store.contexthub.mystore
。
要建立儲存候選項,請使用ContextHub.Utils.inheritance.inherit
函式擴展一個基儲存:
請注意,每個基本儲存區都延伸ContextHub.Store.Core
儲存區。
下面的示例建立ContextHub.Store.PersistedStore
儲存候選項的最簡單擴展:
myStoreCandidate = function(){};
ContextHub.Utils.inheritance.inherit(myStoreCandidate,ContextHub.Store.PersistedStore);
實際上,您的自訂存放區候選項目將定義其他函式或覆寫存放區的初始設定。 若干樣本存放區候選項安裝在/libs/granite/contexthub/components/stores
下方的存放庫中。 若要從這些範例中學習,請使用CRXDE Lite來開啟javascript檔案。
註冊候選儲存庫以將其與ContextHub框架整合,並允許從中建立儲存庫。 要註冊儲存候選項,請使用ContextHub.Utils.storeCandidates
類的registerStoreCandidate
函式。
註冊商店候選項時,您會提供商店類型的名稱。 從候選項建立商店時,您可以使用商店類型來識別其所根據的候選項。
註冊商店候選項時,您會指明其優先順序。 當使用與已註冊的儲存候選相同的儲存類型來註冊儲存候選時,使用優先順序較高的候選。 因此,您可以使用新實施來覆寫現有的商店候選項目。
ContextHub.Utils.storeCandidates.registerStoreCandidate(myStoreCandidate,
'contexthub.mystorecandidate', 0);
在大多數情況下,只需要一個候選項,並且優先順序可以設定為0
,但如果您有興趣,可以了解更多高級註冊,允許根據javascript條件(applies
)和候選優先順序選擇少數儲存實施之一。
當隨ContextHub🔗安裝的模組類型不符合您的需求時,建立自訂UI模組類型。 要建立UI模組類型,請通過擴展ContextHub.UI.BaseModuleRenderer
類,然後向ContextHub.UI
註冊它來建立新的UI模組轉譯器。
要建立UI模組呈現器,請建立Class
對象,該對象包含呈現UI模組的邏輯。 至少,您的類必須執行以下操作:
擴展ContextHub.UI.BaseModuleRenderer
類。 此類別是所有UI模組轉譯器的基本實作。 Class
對象定義了名為extend
的屬性,用於將此類命名為正在擴展的類。
提供預設設定。 建立defaultConfig
屬性。 此屬性是一個對象,包含為contexthub.base
UI模組定義的屬性,以及您需要的任何其他屬性。
ContextHub.UI.BaseModuleRenderer
的源位於/libs/granite/contexthub/code/ui/container/js/ContextHub.UI.BaseModuleRenderer.js。 要註冊渲染器,請使用ContextHub.UI
類的registerRenderer
方法。 您必須提供模組類型的名稱。 管理員根據此轉譯器建立UI模組時,會指定此名稱。
在自行執行的匿名函式中建立並註冊渲染器類。 以下範例是以contexthub.browserinfo UI模組的原始碼為基礎。 此UI模組是ContextHub.UI.BaseModuleRenderer
類的簡單擴展。
;(function() {
var SurferinfoRenderer = new Class({
extend: ContextHub.UI.BaseModuleRenderer,
defaultConfig: {
icon: 'coral-Icon--globe',
title: 'Browser/OS Information',
storeMapping: {
surferinfo: 'surferinfo'
},
template:
'<p>{{surferinfo.browser.family}} {{surferinfo.browser.version}}</p>' +
'<p>{{surferinfo.os.name}} {{surferinfo.os.version}}</p>'
}
});
ContextHub.UI.registerRenderer('contexthub.browserinfo', new SurferinfoRenderer());
}());
用戶端程式庫資料夾中必須包含包含建立和註冊轉譯器的程式碼的javascript檔案。 資料夾的類別必須符合下列模式:
contexthub.module.[moduleType]
類別的[moduleType]
部分是註冊模組呈現器的moduleType
。 例如,對於contexthub.browserinfo
的moduleType
,客戶端庫資料夾的類別必須為contexthub.module.contexthub.browserinfo
。