Atualização para Backbone 1.0 – conheça algumas novidades

Olá a todos! Backbone 1.0 foi lançado! Aconteceu de eu aparecer pelo site e ver que o 1.0 é oficial, então eu não tenho ideia de quanto tempo ele foi lançado. Por que ninguém me contou??? De qualquer forma, pode haver alguns de vocês querendo saber o que a nova versão traz e como podem atualizar seus aplicativos para ter acesso às novas maravilhas. Bem, vamos dar uma olhada no novo material.

Analisando eventos e limpando-os

A primeira novidade foi principalmente apenas para ajudar a aliviar o problema conhecido como zombie views. Zombie views são views que foram removidas do DOM e supostamente eliminadas, mas ainda ficam em torno da memória, incapazes de serem coletadas pelo coletor de lixo. A razão pela qual elas não podem ser coletadas pelo coletor de lixo é porque estão ouvindo events em outro objeto (como um modelo ou coleção), o que significa que as referências às views foram armazenadas nesses objetos.

Para combater esse problema, Backbone.Events tem alguns novos métodos: listenTo eStopListening. Como Backbone.View herda os métodos de Backbone.Events, agora temos esses dois métodos disponíveis em nossas views. Agora, em vez de escrever o seguinte:

1
this.model.on('event', this.someMethod, this);

…podemos escrever isto:

1
this.listenTo(this.model, 'event', this.someMethod);

…em nossos construtores. Isso nos dá duas coisas:

  • O significado é um pouco mais claro e mostra como nós queremos que o relacionamento seja. Agora, o nome do método indica que estamos ouvindo um evento em vez de um callback ser entregue a um outro objeto para ser chamado quando o evento é acionado. Enquanto isso não realmente muda a forma como o código funciona nos bastidores, esclarece como queremos que os relacionamentos sejam.
  • Quando usamos listenTo, ele armazena os eventos que estamos ouvindo na View também, então agora podemos chamar stopListening e ele vai remover todos os ouvintes de eventos que configuramos via listenTo.

Como mencionado, StopListening é a contrapartida para listenTo. Cada evento que registrarmos via listenTo será cancelado quando chamarmos StopListening. Você também pode especificar quais eventos e callbacks a serem cancelados, assim como usando off no modelo que você está ouvindo. Então, se você só quer parar de ouvir o evento “change” do modelo, você pode chamar:

1
this.stopListening(this.model, 'change');

A melhor parte sobre StopListening é que você não precisa chamá-lo. Quando você chamar remove em uma view, StopListening também será automaticamente chamado. Isso significa que se você quiser dispor de uma view, tudo que você precisa fazer é chamar someView.remove(); (supondo que você não tenha referências à view em outras lugares).

Esse tipo de funcionalidade foi adicionada em várias extensões do Backbone, mas agora vem gratuitamente com bom e velho Backbone. Isso pode significar que se você atualizar a sua versão do Backbone, você vai querer ter certeza de que também atualizou suas extensões para garantir que eles não estão em conflito com essa nova funcionalidade.

Validação de modelo

Nenhuma nova funcionalidade especial foi adicionada aqui, mas alguns padrões e comportamentos mudaram. Primeiro de tudo, por padrão, os modelos não são validados automaticamente quando você chama set. A única vez em que eles são automaticamente validados é quando você chama save. No entanto, você pode validar um modelo quando você chama set passando a opção {validate: true} assim:

1
model.set({'some':'property'}, {validate:true});

A outra grande mudança para a validação é que um evento ‘inválido’ será demitido, em vez de ‘error’, então tenha certeza de que você altere seus ouvintes.

Collection Updates

Nos velhos tempos, quando você chamava fetch em uma collection, ele retiraria todos os seus modelos antigos e apenas inseriria todos os novos que foram recuperados. Agora, vou tentar atualizar a collection adicionando, removendo e mesclando modelos. Além disso, o método update das coleções foi renomeado para set, de forma que se assemelhe ao nome do método do modelo. Esse é o método que o fetch usa para atualizar a collection.

Se você quiser usar a antiga funcionalidade, na qual fetch substituiria todos os modelos atuais, você pode passar a opção {reset: true}.

Route Decoding

Anteriormente, um Backbone.Router deixaria segmentos de URL como era antes de passar os argumentos para os manipuladores de rota, mas agora os segmentos de URL já URL codificada dados em si, os dados serão descodificados antes de passá-la para os manipuladores. Isso deve tornar mais simples para interpretar argumentos do manipulador.

Conclusão

De acordo com os documentos na página do Backbone, essas são as mudanças maiores. Algumas delas são muito boas, e eu estou especialmente empolgado com a primeira, mesmo que eu tenha passado a usar extensões como Marionette. Há várias outras mudanças nas quais você provavelmente vai querer dar uma olhada se estiver usando Backbone 0.9.2 ou anterior, que você pode ver no log de alterações. Todas as versões depois da 0.9.2 são tecnicamente betas para a 1.0, então você vai querer dar uma olhada nas mudanças para cada uma delas. Há uma várias mudanças maiores e características adicionais que você não vai querer perder.

Fonte: http://imasters.com.br/tecnologia/redes-e-servidores/atualizacao-para-backbone-1-0-conheca-algumas-novidades/