Melhorar e arquivar o componente Web do Oracle JET
Introdução
Um componente Web é uma parte reutilizável da interface do usuário que você pode incorporar como um elemento HTML personalizado em seu aplicativo Web. Os componentes Web podem conter componentes do Oracle JavaScript Extension Toolkit (Oracle JET), outros componentes Web, HTML, JavaScript, TypeScript e Cascading Style Sheets (CSS). Você usa as ferramentas do Oracle JET para criar o componente Web e pode usar um modelo inicial do Oracle JET para gerar os arquivos HTML e Typescript ou JavaScript que você modifica para adicionar e configurar o componente Web.
No tutorial anterior, você criou um componente da Web que exibe quatro campos de texto de entrada. Neste tutorial, você aprenderá a alterar o campo ID do Item para um campo somente leitura, adicionar um conversor de moeda ao campo Preço do Item e adicionar um validador de tamanho ao campo Descrição do Item. Para transmitir valores a esses campos, defina os atributos para os quatro campos de texto de entrada na origem HTML do aplicativo Web. Os atributos usados devem ter uma propriedade correspondente definida no arquivo de metadados do componente Web. Você pode passar valores estáticos para os atributos ou usar a sintaxe de expressão vinculada a dados para a vinculação de dados unidirecional ou bidirecional entre o aplicativo Web e o componente Web.
Objetivos
Neste tutorial, você aperfeiçoará o componente Web com recursos adicionais em um aplicativo Web Oracle JET. Você também aprenderá a empacotar o componente Web e prepará-lo para compartilhar com outro aplicativo.
Pré-requisitos
- Um ambiente de desenvolvimento configurado para criar aplicativos Oracle JET, com o runtime JavaScript, Node.js e a interface de linha de comando da release mais recente do Oracle JET instalada
- Conclusão do tutorial anterior nesta programação de estudo, para que você tenha criado o componente Web
demo-update-itemna pastaJET_Web_Component_Application
Tarefa 1: Editar ID do Item para Somente Leitura
O campo ID do Item no seu componente da Web deve ser somente leitura. Para fins de acessibilidade, substitua o elemento HTML personalizado oj-input-text do campo ID do Item pelo elemento HTML personalizado oj-label-value. O elemento oj-label-value define um slot que usa o elemento oj-bind-text para modificar o campo ID do Item como somente leitura.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-view.htmlem um editor. -
Localize o elemento HTML personalizado
oj-input-textcom o atributovalue="ID number"e substitua o elementooj-input-textpelo elementooj-label-value.<oj-form-layout id="form-container" label-edge="[[labelEdge]]"> <oj-label-value> <oj-label slot="label">Item ID</oj-label> <div slot="value"> <oj-bind-text value="ID number"></oj-bind-text> </div> </oj-label-value> <oj-input-text value="Name" label-hint="Item Name"></oj-input-text> . . . </oj-form-layout> -
Salve o arquivo
demo-update-item-view.html.Seu código
demo-update-item-view.htmldeve ser semelhante a readonly-itemid.txt. -
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-viewModel.tsem um editor. -
No arquivo
demo-update-item-viewModel.ts, importe o módulo do carregadorojs/ojlabelvalueapós a entrada que importa o móduloojs/ojinputtext."use strict"; import * as ko from "knockout"; import componentStrings = require("ojL10n!./resources/nls/demo-update-item-strings"); import Context = require("ojs/ojcontext"); import Composite = require("ojs/ojcomposite"); import "ojs/ojknockout"; import * as ResponsiveUtils from "ojs/ojresponsiveutils"; import * as ResponsiveKnockoutUtils from "ojs/ojresponsiveknockoututils"; import "ojs/ojformlayout"; import "ojs/ojinputtext"; import "ojs/ojlabelvalue"; -
Salve o arquivo
demo-update-item-viewModel.ts. -
Na janela do terminal, altere para o diretório
JET_Web_Component_Applicatione execute o aplicativo.$ ojet serveO browser exibe o componente Web com os quatro campos de texto de entrada na guia Painel do seu aplicativo Web. O campo ID do Item agora é somente para leitura.

-
Deixe a janela do terminal e a janela ou guia do browser que exibe seu aplicativo Web aberto.
O comando
ojet servepermite fazer alterações no código do aplicativo que são refletidas imediatamente no browser.
Tarefa 2: Adicionar um Conversor de Moeda
Use um conversor de moeda para o campo Preço do item.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-view.htmlem um editor. -
Localize o elemento HTML personalizado
oj-input-textcom o atributovalue="Price"e atualize-o para usar um conversor de moeda que definiremos em uma etapa posterior. Inserimos00em vez dePricecomo o valor de espaço reservado da propriedadevalueporque o conversor requer um número válido em vez de uma string.<oj-form-layout id="form-container" label-edge="[[labelEdge]]"> ... <oj-input-text value="Name" label-hint="Item Name"></oj-input-text> <oj-input-text value="00" help.instruction="enter an amount with or without grouping separator" converter="[[currency]]" label-hint="Item Price"> </oj-input-text> <oj-input-text value="Description" label-hint="Item Description"></oj-input-text> </oj-form-layout> -
Salve o arquivo
demo-update-item-view.html. Seu códigodemo-update-item-view.htmldeve ser semelhante a currency-code-html.txt. -
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-viewModel.tsem um editor. -
Na parte superior do arquivo
demo-update-item-viewModel.ts, importeIntlNumberConverterdo móduloojs/ojconverter-number:"use strict"; import * as ko from "knockout"; . . . import "ojs/ojinputtext"; import "ojs/ojlabelvalue"; import { IntlNumberConverter } from "ojs/ojconverter-number"; -
Na classe
ViewModel, adicione um campo de moeda para o conversor de moeda que você inicializará na próxima etapa.export default class ViewModel implements Composite.ViewModel<Composite.PropertiesType> { busyResolve: (() => void); . . . currency: IntlNumberConverter; constructor(context: Composite.ViewModelContext<Composite.PropertiesType>) { . . . -
No método
constructor()após o exemplo de entradas observáveis, adicione o conversor de moeda.constructor(context: Composite.ViewModelContext<Composite.PropertiesType>) { . . . this.res = componentStrings["demo-update-item"]; this.currency = new IntlNumberConverter({ style: "currency", currency: "USD ", currencyDisplay: "code", }); -
Salve o arquivo
demo-update-item-viewModel.ts.Seu código
demo-update-item-viewModel.tsdeve ser semelhante a currency-code-ts.txt. -
Retorne ao browser para exibir as alterações no seu aplicativo Web.
-
Informe o preço no campo Preço do Item e pressione Enter para verificar as alterações.

Descrição da ilustração form-wc-currency-converter.png
O preço informado mostra um prefixo USD. Se você informar um valor não numérico, o campo Preço do Item exibirá um erro.
-
Deixe a janela do terminal e a janela ou guia do browser que exibe seu aplicativo Web aberto.
O comando
ojet servepermite fazer alterações no código do aplicativo que são refletidas imediatamente no browser.
Tarefa 3: Adicionar um Validador de Tamanho
Use um validador de tamanho para o campo Descrição do Item.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-view.htmlem um editor. -
Localize o elemento HTML personalizado
oj-input-textcom o atributovalue="Description"e atualize-o para usar um validador de tamanho que definiremos em uma etapa posterior.<oj-form-layout id="form-container"> ... <oj-input-text value="00" help.instruction="enter an amount with or without grouping separator" converter="[[currency]]" label-hint="Item Price"> </oj-input-text> <oj-input-text value="{{lengthValue1}}" validators="[[validators]]" placeholder="Enter a description of 5-50 characters" label-hint="Item Description" ></oj-input-text> </oj-form-layout> -
Salve o arquivo
demo-update-item-view.html.Seu código
demo-update-item-view.htmldeve ser semelhante a validator-code-html.txt. -
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-viewModel.tsem um editor. -
Na parte superior do arquivo
demo-update-item-viewModel.ts, importeAsyncLengthValidatordo móduloojs/ojasyncvalidator-length:import * as ko from "knockout"; . . . import { IntlNumberConverter } from "ojs/ojconverter-number"; import AsyncLengthValidator = require("ojs/ojasyncvalidator-length"); -
Na classe
ViewModel, adicione campos para os observáveis Knockout que você inicializará na próxima etapa.export default class ViewModel implements Composite.ViewModel<Composite.PropertiesType> { busyResolve: (() => void); . . . currency: IntlNumberConverter; lengthValue1: ko.Observable<string>; validators: ko.ObservableArray<AsyncLengthValidator<string>>; -
No método
constructorapós o conversor de moeda, adicione o validador de tamanho.constructor(context: Composite.ViewModelContext<Composite.PropertiesType>) { . . . this.res = componentStrings["demo-update-item"]; this.currency = new IntlNumberConverter({ style: "currency", currency: "USD ", currencyDisplay: "code", }); this.lengthValue1 = ko.observable(""); this.validators = ko.observableArray([ new AsyncLengthValidator({ min: 5, max: 50 }), ]);O validador de tamanho define um tamanho mínimo de caracteres de 5 caracteres e um tamanho máximo de 50 caracteres para o campo Descrição do Item.
-
Salve o arquivo
demo-update-item-viewModel.ts.Seu código
demo-update-item-viewModel.tsdeve ser semelhante a final-demo-update-item-viewModel-ts.txt. -
Retorne ao browser para exibir as alterações no seu aplicativo Web.
-
Informe uma descrição no campo Descrição do Item e pressione Enter e pressione Tab para limpar a dica de ferramenta.

Descrição da ilustração form-wc-length-validator.png
Se a descrição for maior que o intervalo definido, o campo Descrição do Item exibirá um erro.
-
Deixe a janela do terminal e a janela ou guia do browser que exibe seu aplicativo Web aberto.
O comando
ojet servepermite fazer alterações no código do aplicativo que são refletidas imediatamente no browser.
Tarefa 4: Definir os Metadados do Componente Web
O arquivo de metadados do componente Web define as propriedades obrigatórias do componente Web. Cada campo de texto de entrada do componente Web deve ter uma propriedade associada que fará write back de atualizações do componente Web.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivocomponent.jsonem um editor. -
Defina as propriedades de metadados
displayNameedescription.{ "name": "demo-update-item", "version": "1.0.0", "jetVersion": "^12.0.0", "displayName": "demo-update-item", "description": "A Web Component with form layout", ... } -
Abaixo da propriedade de metadados
description, use a convenção de nomeação de maiúsculas e minúsculas para definir as propriedades vinculadas aos campos na exibição do componente Web."description": "A Web Component with form layout", "properties": { "itemId": { "type": "number" }, "itemName": { "type": "string", "description": "Description for the item-name attribute", "writeback": true }, "itemPrice": { "type": "number", "writeback": true }, "itemDesc": { "type": "string", "writeback": true } },A propriedade
writebackdefinida comotruegarante que essas propriedades receberão atualizações do componente Web que faz referência à propriedade em uma expressão de vinculação de dados bidirecional. -
Salve o arquivo
component.json.Seu código
component.jsondeve ser semelhante a component-json.txt.
Tarefa 5: Definir os Atributos e os Valores de Atributo
Os atributos do elemento do componente Web podem fazer referência às propriedades declaradas no arquivo de metadados do componente Web. Na origem HTML do aplicativo Web, as referências de propriedade aparecem como nomes de atributo de elemento HTML sem distinção entre maiúsculas e minúsculas com hifens.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/viewse abra o arquivodashboard.htmlem um editor. -
No elemento
demo-update-item, defina os atributos com valores estáticos para os quatro campos de texto de entrada.<div class="oj-hybrid-padding"> <div class="oj-panel oj-sm-margin-2x demo-mypanel"> <h1 class="oj-header-border">Update Item Details</h1> <div> <demo-update-item item-id="34" item-name="John" item-price="3434.55" item-desc="This is an updated item"> </demo-update-item> </div> </div> </div> -
Salve o arquivo
dashboard.html.
Tarefa 6: Definir a Exibição do Componente Web
Você pode acessar qualquer propriedade definida no arquivo de metadados do componente Web usando a variável $properties do contexto de vinculação de exibição.
-
Navegue até o diretório
JET_Web_Component_Application/src/ts/jet-composites/demo-update-iteme abra o arquivodemo-update-item-view.htmlem um editor. -
Nos elementos HTML personalizados do elemento
oj-form-layout, vincule os atributosvalueàs propriedades definidas no arquivocomponent.jsonusando a variável$properties.<oj-form-layout id="form-container" label-edge="[[labelEdge]]"> . . . <div slot="value"> <oj-bind-text value="[[$properties.itemId]]"></oj-bind-text> </div> </oj-label-value> <oj-input-text value="{{$properties.itemName}}" label-hint="Item Name"></oj-input-text> <oj-input-text value="{{$properties.itemPrice}}" help.instruction="enter an amount with or without grouping separator" ...> </oj-input-text> <oj-input-text value="{{$properties.itemDesc}}" . . .> </oj-input-text> </oj-form-layout>Para definir valores de atributo, use a sintaxe
[[]]para definir o bind de dados unidirecional e a sintaxe{{}}para o bind de dados bidirecional. -
Salve o arquivo
demo-update-item-view.html.Seu código
demo-update-item-view.htmldeve ser semelhante a final-demo-update-item-view-html.txt. -
Retorne ao browser para exibir as alterações no seu aplicativo Web.
O navegador exibe o componente da Web com os valores estáticos nos quatro campos de texto de entrada.

-
Feche a janela ou guia do browser que exibe seu aplicativo Web em execução.
-
Na janela do terminal, pressione Ctrl+C e, se solicitado, digite
ypara sair do job em batch de ferramentas do Oracle JET. Feche a janela do terminal.
Tarefa 7: Arquivar o Componente Web
Depois de configurar seu componente da Web, prepare o componente da Web para outros aplicativos.
Abra uma janela de terminal, altere para o diretório JET_Web_Component_Application e execute o comando ojet package component com o nome do componente, demo-update-item, como parâmetro de comando:
$ ojet package component demo-update-item
O Oracle JET empacota o conteúdo do diretório JET_Web_Component_Application/src/ts/jet-composites/demo-update-item em um arquivo ZIP (demo-update-item_1-0-0.zip) que ele cria no diretório JET_Web_Component_Application/dist. Como parte da tarefa de empacotamento, o Oracle JET transfere o código TypeScript no diretório JET_Web_Component_Application/src/ts/jet-composites/demo-update-item para o código JavaScript. Se, por exemplo, você abrir o arquivo JET_Web_Component_Application/dist/demo-update-item_1-0-0.zip, perceberá que ele contém um arquivo demo-update-item-viewModel.js que o conjunto de ferramentas Oracle JET transpilou do arquivo demo-update-item-viewModel.ts no diretório JET_Web_Component_Application/src/ts/jet-composites/demo-update-item.
Você distribui o arquivo demo-update-item_1-0-0.zip do diretório JET_Web_Component_Application/dist para os consumidores que desejam reutilizar seu componente Web em seu aplicativo Web. Para usar o componente Web em seu aplicativo Web, os consumidores extraem o conteúdo do arquivo ZIP para um diretório demo-update-item em seu aplicativo Web. Vamos detalhar essa última tarefa no próximo tutorial.
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Enhance and archive the Oracle JET web component
F53211-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.