Skip to content

Backbone extensions to provide complete Rails interaction on CoffeeScript/Javascript, providing a remote search mechanism, keeping single reference models in memory, reporting refresh conflicts and consistently persisting models and there relations.

License

Notifications You must be signed in to change notification settings

raphaelpereira/Backbone.RailsStore

Repository files navigation

Backbone.RailsStore

Backbone extensions to provide complete Rails interaction on CoffeeScript/Javascript, providing a remote search mechanism, keeping single reference models in memory, reporting refresh conflicts and consistently persisting models and there relations.

A idéia do Backbone.RailsStore veio quando era necessário salvar vários models de uma vez só, em uma operação que só poderia ser "salvar tudo ou nada". Além disso, percebeu-se que o Backbone.Relational, que era a maneira mais utilizada de fazer relacionamentos entre models, tinha problemas sérios quando havia relacionamentos de models mais elaborados, principalmente no envio dos dados para o servidor.

O Backbone.RailsStore tem um objeto Singleton, a Store, único no sistema. Este objeto tem uma referência para todos os Models na memória do navegador e na hora de salvar, detecta as mudanças em todos os models e as envia para o servidor. Este objeto tem também um método findRemote(), que faz uma busca no servidor, de um determinado tipo de model, similar ao find() no model Rails.

Para obter a Store:

store = Backbone.RailsStore.getInstance();

Para buscar objetos no servidor (findRemote):

store.findRemote({
   ModelType: SglWeb.Models.Product,
   searchParams: {
      domain_id: SglWeb.currentDomain.get('id'),
      keyword: query
      }
   limit: 5,
   success: function() {/* codigo a ser executado no success */ },
   error: function() {/* código a ser executado no erro*/ }
});

Para gravar no servidor:

store.save({
   success: function() {/* código a ser executado no success */},
   error: function() {/* código a ser executado no error */ }
})

e

store.commit({
   success: function() {/* código a ser executado no success */},
   error: function() {/* código a ser executado no error */ }
})

A diferença entre o save() e o commit() é que o commit envia também as informações dos models apagados.

Tem um método também para limpar todos os models da memória (releaseAll()).

A idéia do RailsStore é criar uma espécie de 'contexto' dentro de uma tela, por exemplo, pensando em uma linha temporal, o usuário entra em uma tela, faz alterações em informações presentes em vários models, e depois salva. Ao salvar são enviadas todas as informações de novos models (para serem criados) e models modificados (para serem alterados) . Depois ao entrar em outro contexto, com carga de novos models, etc, pode ser chamado o método releaseAll() para fazer uma "limpeza" dos models do contexto anterior:

Backbone.RailsStore.getInstance().releaseAll();

About

Backbone extensions to provide complete Rails interaction on CoffeeScript/Javascript, providing a remote search mechanism, keeping single reference models in memory, reporting refresh conflicts and consistently persisting models and there relations.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published