Melhor maneira de salvar as mudanças no MVVM / Knockoutjs Web App?

9

Eu tenho tocado com o KnockoutJS e adoro o quanto ele simplifica o design de todos os ângulos, evitando que as coisas caiam nas rachaduras. Minha pergunta é qual é a "melhor prática" recomendada para salvar os dados de volta ao servidor? Meu entendimento é que, em um MVVM conectado, o primeiro "M" é a camada de dados e, portanto, o rastreamento de dependência e as notificações no acionador ViewModel são salvos diretamente na camada de dados. Em um aplicativo JavaScript, estamos desconectados e seletivamente salvamos de volta no servidor usando o AJAX.

O aplicativo que estou usando atualmente é o MVC3 e eu tenho absolutamente como escrever uma ação "Salvar" no meu controlador, colocar um botão "Salvar" em algum lugar na minha página, postar todo o ViewModel para essa ação Salvar e em seguida, persista isso no banco de dados. Mas e quando você faz uma edição rápida e depois a salva novamente? Ou se um botão de salvar não se encaixar no fluxo do design? Em vez disso, você deseja postar na ação toda vez que uma alteração é feita no formulário sem nenhum botão salvar? As ideias que eu pulei são:

  • Publique todo o ViewModel toda vez que qualquer alteração for feita e faça a Action descobrir o que é novo e o que não é (não ideal, especialmente para modelos grandes, porque nada mais importante seria porque os dados transmitidos em cada salvamento seriam desnecessariamente grandes ).
  • Adicione uma propriedade a cada item no ViewModel que controla se é novo e / ou alterado desde o último salvamento. Então, grep para fora desses itens e postar apenas aqueles para o servidor (eu não testei isso, mas suponho que isso pode ser feito usando a propriedade _destroy, como se destina a um aplicativo Rails).
  • Separe em tantos ViewModels menores quanto for plausível, de modo que qualquer dor das duas primeiras opções seja minimizada (isso provavelmente deve ser feito independentemente).
  • Alguma outra maneira melhor?

Estou esperançoso de que há algumas boas idéias por aí que eu não tenha pensado. Ser capaz de vincular declarativamente tudo E ainda salvar eficientemente seria incrível.

    
por Jorin 15.04.2011 в 01:59
fonte

3 respostas

0

A única outra coisa em que consegui pensar é inscrevendo-se . Quando comecei a ler o seu post eu estava pensando bandeiras w / grep embora.

Editar: melhor ainda, ko.utils.compareArrays parece promissor.

Aqui está um exemplo prático.

A única coisa que resta a fazer é detectar alterações nos valores dos valores 'retidos'. Você está bem no seu caminho embora.

    
por David Wick 20.04.2011 / 07:23
fonte
5

Acabei de voltar do Mix11, onde participei da sessão sobre o Knockout.js. Pode valer a pena assistir Steve Sanderson fazendo uma demonstração completa do CRUD.

    
por Paulczy 15.04.2011 / 17:08
fonte
0

Você pode verificar o plugin de Mapeamento para o Knockout, ele permite que você carregue o Knockout de um array JSON. Se não for muito grande, salve esse array no servidor em um timer (ou após uma alteração). Espero que isso ajude, desculpe se você já sabia disso.

link

link

    
por dylanized 16.05.2011 / 11:34
fonte