ContextHub の拡張 extending-contexthub

提供されている ContextHub ストアやモジュールのタイプがソリューションの要件を満たさない場合は、新しいタイプを定義できます。

カスタムストア候補の作成 creating-custom-store-candidates

ContextHub ストアは、登録済みのストア候補から作成します。カスタムストアを作成するには、ストア候補を作成して登録します。

ストア候補を作成および登録するコードを含む JavaScript ファイルは、 クライアントライブラリフォルダー. フォルダーのカテゴリは、次のパターンに一致しなければなりません。

contexthub.store.[storeType]

カテゴリの [storeType] 部分は、ストア候補と一緒に登録されている storeType です(「ContextHub ストア候補の登録」を参照)。例えば、storeType が contexthub.mystore の場合、クライアントライブラリフォルダーのカテゴリは contexthub.store.contexthub.mystore でなければなりません。

ContextHub ストア候補の作成 creating-a-contexthub-store-candidate

ストア候補を作成するには、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 ストア候補の登録 registering-a-contexthub-store-candidate

ストア候補を登録して ContextHub フレームワークに統合し、ストア候補からストアを作成できるようにします。ストア候補を登録するには、registerStoreCandidate クラスの ContextHub.Utils.storeCandidates 関数を使用します。

ストア候補を登録する際に、ストアタイプの名前を指定します。候補からストアを作成するときは、ストアタイプを使用してベースとする候補を識別します。

ストア候補を登録する際に、優先度を指定します。既に登録済みのストア候補と同じストアタイプを使用してストア候補を登録した場合、優先度の高い候補が使用されます。そのため、新しいストア候補を既存のストア候補に優先させることができます。

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

通常、必要な候補は 1 つだけで、優先度はに設定できます。 0. しかし、興味があれば、次のことを学ぶことができます より高度な登録、 これにより、JavaScript の条件(applies)に設定し、優先度の候補を使用します。

ContextHub UI モジュールタイプの作成 creating-contexthub-ui-module-types

ContextHub に付属してインストールされる UI モジュールタイプが要件を満たさない場合は、カスタム UI モジュールタイプを作成できます。UI モジュールタイプを作成するには、ContextHub.UI.BaseModuleRenderer クラスを拡張して ContextHub.UI に登録し、UI モジュールレンダラーを作成します。

UI モジュールレンダラーを作成するには、UI モジュールをレンダリングするロジックを格納する Class オブジェクトを作成します。少なくとも、このクラスは次のアクションを実行する必要があります。

  • ContextHub.UI.BaseModuleRenderer クラスを拡張します。このクラスは、すべての UI モジュールレンダラーのベースとなる実装です。Class オブジェクトは、このクラスが拡張されていることを示すために使用する extend というプロパティを定義します。

  • デフォルトの設定を指定します。defaultConfig プロパティを作成します。このプロパティは、contexthub.base UI モジュール用に定義されているプロパティと、必要なその他すべてのプロパティを含むオブジェクトです。

ソース: ContextHub.UI.BaseModuleRenderer は、/libs/granite/contexthub/code/ui/container/js/ContextHub.UI.BaseModuleRenderer.js にあります。 レンダラーを登録するには、registerRenderer クラスの ContextHub.UI メソッドを使用します。モジュールタイプの名前を指定します。 管理者がこのレンダラーをベースとして 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 です。例えば、moduleTypecontexthub.browserinfo の場合、クライアントライブラリフォルダーのカテゴリは contexthub.module.contexthub.browserinfo でなければなりません。

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2