Elemar DEV

Tecnologia e desenvolvimento .net

Você conhece KnockoutJS?!

Olá pessoal. Tudo certo?!

O que você acharia de poder desenvolver suas páginas Web de forma mais declarativa?! É exatamente isso que o KnockoutJS permite.

O que é KnockoutJS?

Seguindo a descrição do site oficial:

KnockoutJS é uma biblioteca que simplifica a construção de interfaces gráficas dinâmicas, com Javascript, através da utilização de MVVM.

A propósito, se você não conhece MVVM, recomendo que veja esse post.

Ainda segundo o site, KnockoutJS segue esse conceitos-chave:

  • Declarative Bindings – Easily associate DOM elements with model data using a concise, readable syntax;
  • Automatic UI Refresh – When your data model’s state changes, your UI updates automatically;
  • Dependency Tracking – Implicitly set up chains of relationships between model data, to transform and combine it;
  • Templating – Quickly generate sophisticated, nested UIs as a function of your model data.

Como obter?

Você pode obter KnockoutJS diretamente do site (o js tem apenas 40K), ou através do Nuget.

image

Além disso, pode colaborar com o projeto no Github.

Como aprender KnockoutJS?

O site oficial possui um excelente tutorial on-line.

image

Além disso, há uma excelente página de exemplos. Comece por lá.

Um pequeno exemplo

Tempos atrás, mostrei como escrever um Remaining Character Count (semelhante ao Twitter) usando jQuery. Abaixo, segue o mesmo exemplo com Knockout.

<!doctype html>
<html>
<head>
</head>
    <body>

        <div>
            <h2>What's happening?</h2>
            <textarea
                cols='50'
                rows='5'
                data-bind='value: message, valueUpdate:"afterkeydown"'
                />

            <div data-bind='text: remaining'></div>
            <button data-bind='enable: couldSend'>Send</button>
        </div>

        <script src="jquery-1.7.2.min.js" type="text/javascript"></script>
        <script src="knockout-2.1.0.js" type="text/javascript"></script>

        <script type='text/javascript'>
            ...
        </script>

    </body>
</html>

Abaixo, o Javascript.

$(function () {
    var ViewModel = function (message) {

        this.message = ko.observable(message);

        this.remaining = ko.computed(function () {
            return 140 - this.message().length;
        }, this);

        this.couldSend = ko.computed(function () {
            return this.message().length > 0 && this.message().length < 140;
        }, this);

        this.show = function () {
            alert(this.message());
        };

    };
    ko.applyBindings(new ViewModel(""));
});

Bacana, não?!

UPDATE: O @albertomonteiro fez a gentileza de criar um jsFiddle para este exemplo. Quer ver na prática, então clique aqui.

Era isso.

13 Comentários em “Você conhece KnockoutJS?!

  1. La na empresa apresentei o ko e passamos a usa, é lindo quando reduzimos 140 linhas de jQuery para 40 com ko, um código 1000x mais fácil de ser lido do que o anterior.
    RIA é fantástico e o ko facilita bastante isso, ótimo post!
    Também vou falar de ko no meu blog, explicar algumas coisas que usamos la e que deixam bem fácil o nosso trabalho.

  2. Fiz uma breve alteraçãozinha, nem digitar mais o cara consegue, o fiddle está aqui:
    http://jsfiddle.net/AlbertoMonteiro/Y2nDM/embedded/

  3. Conheço e gosto muito.

  4. bgoliveira
    25/05/2012

    Outro excelente post Elemar, parabéns.
    Estou usando o BackboneJs como alternativa ao KnockoutJS e estou gostando bastante, principalmente da parte de sync com os serviços RESTs que é muito elegante e não ha necessidade de usar uma outra biblioteca como o openshot por exemplo para fazer isso. Você conhece essa biblioteca?
    Estou escrevendo um artigo sobre o Backbone e quando eu terminar te passo, gostaria muito de saber sua opnião.
    Abraços

  5. Eduardo Chiletto
    25/05/2012

    Estou usando no meu trabalho. Muito boa.

  6. Mestre o meu twitter ficou errado, é @aibertomonteiro

  7. Pingback: KnockoutJS – Mantendo propriedades tipadas com extenders « Alberto Monteiro, C# developer

  8. Elemar

    Estou avançando com os meus testes com o KO e estou com uma dúvida; como usá-lo em conjunto com os Models (do .NET MVC) sem ter que ficar reescrevendo os modelos no Javascript?!

    Eu já possuo alguns modelos recheados com DataAnnotations e me facilitam bastante na validação (no servidor e no cliente) e gostaria de reaproveitá-los e fazer os bind’s no cliente baseados nesses modelos.

    Isso é possível, existe alguma alternativa nesse sentido?!

    Valeu

  9. O mundo involui
    24/03/2013

    Databind de volta, já vi esse filme…

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Informação

Publicado às 24/05/2012 por em Post e marcado , .

Estatísticas

  • 428,895 hits
%d bloggers like this: