扩展ContextHub

定义新类型的ContextHub存储和模块(如果提供的存储和模块不符合您的解决方案要求)。

创建自定义存储候选项

ContextHub存储区是根据注册的存储候选区创建的。 要创建自定义存储,您需要创建并注册存储候选项。

包含创建和注册存储候选项的代码的javascript文件必须包含在客户端库文件夹中。 文件夹的类别必须匹配以下模式:

contexthub.store.[storeType]

类别的storeType部分是storeType,该存储候选项在其中注册。 (请参阅注册ContextHub存储候选项)。 例如,对于contexthub.mystore的storeType,客户端库文件夹的类别必须为contexthub.store.contexthub.mystore

创建ContextHub存储候选项

要创建存储候选项,请使用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下的存储库中。

注册ContextHub存储候选项

注册存储候选项以将其与ContextHub框架集成,并允许从中创建存储。 要注册存储候选项,请使用ContextHub.Utils.storeCandidates类的registerStoreCandidate函数。

注册存储候选项时,将提供存储类型的名称。 从候选项创建存储时,使用存储类型来标识其所基于的候选项。

注册商店候选项时,需指明其优先级。 当使用与已注册的存储候选者相同的存储类型注册存储候选者时,使用具有较高优先级的候选者。 因此,您可以使用新实施来覆盖现有的存储候选项。

ContextHub.Utils.storeCandidates.registerStoreCandidate(myStoreCandidate,
                                'contexthub.mystorecandidate', 0);

在大多数情况下,只需要一个候选项,并且优先级可以设置为0,但如果您感兴趣,您可以了解有关更高级注册的信息,,该信息允许根据javascript条件(applies)和候选优先级选择少数存储实施之一。

创建ContextHub UI模块类型

如果随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.browserinfomoduleType,客户端库文件夹的类别必须为contexthub.module.contexthub.browserinfo

在此页面上