Defina novos tipos de armazenamentos e módulos do ContextHub quando os fornecidos não atenderem aos requisitos da solução.
As lojas do ContextHub são criadas de candidatos a lojas registradas. Para criar uma loja personalizada, é necessário criar e registrar um candidato de loja.
O arquivo javascript que inclui o código que cria e registra o candidato da loja deve ser incluído em uma pasta da biblioteca do cliente. A categoria da pasta deve corresponder ao seguinte padrão:
contexthub.store.[storeType]
A parte [storeType]
da categoria é a storeType
com a qual o candidato da loja está registrado. (Consulte Registrando um Candidato à Loja do ContextHub). Por exemplo, para o storeType de contexthub.mystore
, a categoria da pasta da biblioteca do cliente deve ser contexthub.store.contexthub.mystore
.
Para criar um candidato de loja, use a função ContextHub.Utils.inheritance.inherit
para estender um dos armazenamentos base:
ContextHub.Store.PersistedStore
ContextHub.Store.SessionStore
ContextHub.Store.JSONPStore
ContextHub.Store.PersistedJSONPStore
Observe que cada armazenamento base estende a loja ContextHub.Store.Core
.
O exemplo a seguir cria a extensão mais simples do candidato de armazenamento ContextHub.Store.PersistedStore
:
myStoreCandidate = function(){};
ContextHub.Utils.inheritance.inherit(myStoreCandidate,ContextHub.Store.PersistedStore);
Realisticamente, seus candidatos à loja personalizada definirão funções adicionais ou substituirão a configuração inicial da loja. Vários candidatos de armazenamento de amostra estão instalados no repositório abaixo de /libs/granite/contexthub/components/stores
. Para aprender com essas amostras, use o CRXDE Lite para abrir os arquivos javascript.
Registre um candidato de loja para integrá-lo à estrutura do ContextHub e permitir que as lojas sejam criadas a partir dela. Para registrar um candidato de loja, use a função registerStoreCandidate
da classe ContextHub.Utils.storeCandidates
.
Ao registrar um candidato de loja, forneça um nome para o tipo de loja. Ao criar uma loja a partir do candidato, use o tipo de loja para identificar o candidato no qual ela se baseia.
Ao registrar um candidato a loja, você indica sua prioridade. Quando um candidato de loja é registrado usando o mesmo tipo de loja que um candidato de loja já registrado, o candidato com prioridade mais alta é usado. Portanto, você pode substituir os candidatos de armazenamento existentes por novas implementações.
ContextHub.Utils.storeCandidates.registerStoreCandidate(myStoreCandidate,
'contexthub.mystorecandidate', 0);
Na maioria dos casos, apenas um candidato é necessário e a prioridade pode ser definida como 0
, mas se você estiver interessado, você pode saber mais sobre registros mais avançados, o que permite que uma das poucas implementações de armazenamento seja escolhida com base na condição javascript (applies
) e na prioridade do candidato.
Crie tipos de módulo de interface de usuário personalizados quando os que estão instalados com o ContextHub não atenderem aos seus requisitos. Para criar um tipo de módulo de interface, crie um novo renderizador de módulo de interface estendendo a classe ContextHub.UI.BaseModuleRenderer
e, em seguida, registrando-o com ContextHub.UI
.
Para criar um renderizador de modulador de interface, crie um objeto Class
que contenha a lógica que renderiza o módulo de interface. No mínimo, sua classe deve executar as seguintes ações:
Estende a classe ContextHub.UI.BaseModuleRenderer
. Essa classe é a implementação básica para todos os renderizadores de módulo de interface. O objeto Class
define uma propriedade chamada extend
que você usa para nomear essa classe como aquela que está sendo estendida.
Forneça uma configuração padrão. Crie uma propriedade defaultConfig
. Esta propriedade é um objeto que inclui as propriedades definidas para o módulo contexthub.base
da interface do usuário e quaisquer outras propriedades necessárias.
A fonte para ContextHub.UI.BaseModuleRenderer
está localizada em /libs/granite/contexthub/code/ui/container/js/ContextHub.UI.BaseModuleRenderer.js. Para registrar o renderizador, use o método registerRenderer
da classe ContextHub.UI
. É necessário fornecer um nome para o tipo de módulo. Quando os administradores criam um módulo de interface com base nesse renderizador, eles especificam esse nome.
Crie e registre a classe renderizadora em uma função anônima autoexecutável. O exemplo a seguir é baseado no código fonte do módulo de interface do usuário context.browserinfo. Este módulo de interface é uma extensão simples da classe 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());
}());
O arquivo javascript que inclui o código que cria e registra o renderizador deve ser incluído em uma pasta da biblioteca do cliente. A categoria da pasta deve corresponder ao seguinte padrão:
contexthub.module.[moduleType]
A parte [moduleType]
da categoria é a moduleType
com a qual o renderizador de módulo está registrado. Por exemplo, para moduleType
de contexthub.browserinfo
, a categoria da pasta da biblioteca do cliente deve ser contexthub.module.contexthub.browserinfo
.