Ext JS: para que serve o xtype?

vejo que há muitos exemplos em Extj onde, em vez de criar objectos Ext JS, um objecto literal com uma propriedade xtype é passado.

Para que serve isto? Onde está o ganho de desempenho (se essa é a razão) se o objeto vai ser criado de qualquer maneira?

 29
Author: Do Nhu Vy, 2010-02-23

6 answers

xtype é uma forma abreviada de identificar componentes particulares: panel = Ext.Panel, textfield = Ext.form.TextField, etc. Quando você cria uma página ou um formulário, você pode usar estes xtypes em vez de instanciar objetos. Por exemplo,

items: [{
   xtype: 'textfield',
   autoWidth: true,
   fieldLabel: 'something'
}]

Além disso , criar páginas desta forma permite ao Ext JS tornar preguiçosamente a Página . Aqui é onde você vê um " ganho de desempenho."Em vez de criar um grande número de componentes quando o aplicativo carrega, Ext JS torna componentes quando o usuário precisa para vê-los. Não é grande coisa se você tem uma página, mas se você explorar páginas ou um acordeão, muitas páginas são inicialmente escondidas e, portanto, o aplicativo vai carregar mais rapidamente.

Além disso, pode criar e registar novos componentes criando xtypes à sua escolha. O extt JS também tornará os seus componentes preguiçosos.

Você também pode recuperar componentes por ID. Uma vez que o seu componente (bem como os componentes de JS Ext) pode fornecer um monte de bom comportamento, às vezes é conveniente para procurar e recuperar um componente em vez de um simples elemento DOM ou nó.

Em resumo, os xtypes identificam componentes e componentes são um aspecto chave da Ext JS.
 54
Author: Upperstage, 2018-04-20 14:34:24

Sou novo no Sencha / Ext JS, mas acho que neste momento a estranha noção de ter uma string de definição estenográfica para apenas componentes IU deve ser para satisfazer os utilizadores legados.

Olhar para a "Lista de xtypes" aqui: http://docs.sencha.com/touch/2-0/#!/guia/componentes

Existe alguma razão para usar um identificador de cadeia similar, mas não exactamente igual ao nome da "classe" como o identificador de definição abreviada? Não me parece.

Verifique o seguinte amostra de alguns mapeamentos xtype para o nome da classe para o toque Sencha:

  • video - extractoVídeo
    Ok este tipo de faz sentido - versão minúscula do nome' class '
  • carousel - extractocarrossel.Carrossel
    o mesmo padrão aqui
  • carouselindicator - extractocarrossel.Indicador
    Um, ok - vamos incluir um pacote também
  • navigationview - extractonavegacao.Ver
    e outra vez aqui.
  • datepicker - extractoseleccionador.Data
    OK, wtf?

Alguns dos argumentos acima para Xtype foram que permitiu a instanciação diferida de componentes. Eu acho que isso é completamente irrelevante - o que permite instanciação diferida é o fato de que o Sencha/Ext JS suporta a especificação de um identificador de string no lugar de um componente instanciado em uma hierarquia de view.

O mapeamento de uma cadeia em particular para um componente em particular que pode ser instanciado mais tarde é completamente arbitrário-e no caso do Sencha/Ext JS, infelizmente tolo (ver exemplos acima).

Pelo menos siga um padrão sensato - por exemplo, porque não poderia um Ext.A etiqueta tem um "xtype" de Label? Demasiado simples?

Na realidade, eu sei porque-é porque eles fizeram nomes xtype que lêem bem-há muitos nomes de classe repetidos que não funcionariam (Ext.Painel e extractoguia.E pickerDate soaria estúpido. Mas continuo a não gostar. é um pouco estranho e inconsistente. um atalho que ofusca mais do que ajuda.
 8
Author: sksizer, 2016-07-13 19:41:44
Fiz a mesma pergunta que o Joe, mas encontrei a resposta. Se você usar xtype, uma abordagem é também especificar um itemId no mesmo objeto:

{ itemId: "myObject", xtype: 'myClass' ... }

Então você pode encontrá-lo com getComponent() como em

this.getComponent('myObject');
 3
Author: lwe, 2018-04-20 14:37:30

Se declarar uma classe e lhe der um xtype, poderá consultá - la mais tarde com Ext.ComponentQuery.query()

Por exemplo:

Ext.create('MyApp.view.MyButton', {
    xtype: 'mybutton',
    .....
});

Mais tarde no seu código, se o fizer:

var buttonArray = Ext.ComponentQuery.query('mybutton');

Então {[3] } conterá um conjunto de componentes desse tipo de classe. Se você criar componentes inline, sua consulta de componentes será mais complexa.

Outra vantagem do xtypes é que se você mover suas classes ao redor (digamos, você adiciona outra subdiretoria sob "view": MyApp.view.button.MyButton), então suas consultas componentes podem continua a ser o mesmo, uma vez que o seu xtype não muda. Uma vez que o seu projecto se torne grande, irá começar a criar subdiretórios e a mover classes.

 2
Author: Patrick Chu, 2015-06-02 22:15:42

An xtype é simplesmente um nome dado para representar uma classe. É um objecto de definição que não necessita de ser instanciado quando usado em qualquer parte da aplicação.

Ao registar um xtype, usamos simplesmente esta sintaxe: Ext.reg(<xtype name>,<classname>). Mas, nós não usamos a palavra-chave new com o nome da classe porque o componente Mgr irá automaticamente Criar instância desta classe apenas se necessário eg. em resposta a um evento como clique.

Não precisamos de uma instância manualmente porque depois registrando um xtype, o 'componente Mgr' criará automaticamente uma instância para a classe represtada por esse xtype somente se for usado em qualquer lugar da aplicação ou simplesmente não instancia essa classe se não for usada em outro lugar. O componente Mgr executa este código:
create : function(config, defaultType){
    return new types[config.xtype || defaultType](config);
}

xtype não instantes a classe quando Ext.Ready correr. Mas, new Ext.Container() irá criar todas as instâncias quando Ext.Ready correr. Então, usar xtype é inteligente para grandes aplicações para se livrar de objetos de lixo.

 1
Author: Mr.Kool, 2018-04-20 14:46:14

Xtypes no ext não é para o desempenho. É fácil de codificar. Com a ajuda do Código xtype torna-se mais curto, fácil de ler e entender, especialmente se você está criando um Ext.formulario.Parampanel e tem muitas áreas de texto, campos de dados, combos e assim por diante... Por exemplo: é útil quando todos os datefield de formulário tem de ter o formato 'd.m.Y', você não precisa escrever separadamente formato: 'd.m.Y' para cada datefield, é só escrever para formar o objeto de configuração de padrões:{formato:'d.m.Y'} ... há muitos casos quando o Xtype enviar o código...

Para concluir, é fácil codificar...
 -3
Author: Zango, 2010-02-23 12:28:18