[Backbone.js] Dúvida: link de navegação não funciona

28 views
Skip to first unread message

Luiz Gonzaga

unread,
May 2, 2012, 4:53:27 PM5/2/12
to
Pessoal, alguém aí saberia me tirar uma dúvida em Backbone?

Tenho uma aplicação que tem duas abas principais de navegação, cada uma com suas devidas rotas configuradas (estendendo o Router do Backbone), sendo elas Aba A e Aba B.

Por padrão, o index carrega o contéudo da Aba A.

Daí, quando clico na Aba B, a mesma é carregada corretamente, mudando a URL no navegador para #!abaB, mas quando, a partir daí, eu clico na Aba A, o conteúdo da Aba A não é carregado! A URL muda para #!abaA, mas o conteúdo permanece o da Aba B. Estranho!

Colocando um console.log() no método do router, percebo que o mesmo está sendo executado normalmente a cada clique, mas algo "no meio do caminho" deve estar errado, já que não carrega o conteúdo que deveria carregar.

Mais uma informação importante: se eu entrar na Aba B, recarregar a página a partir dela (ou seja, como se tivesse entrado direto na #!abaB e não no index) e então clicar na Aba A, aí funciona. A Aba A é carregada! Daí se eu voltar pra B e tentar ir de novo pra A, ocorrer o mesmo problema...

Alguém tem alguma luz???

Muito obrigado

guilherme reis

unread,
May 2, 2012, 4:56:05 PM5/2/12
to rail...@googlegroups.com
O que acontece com o log de rede?Está fazendo a requisição normalmente
qd vc clica em A?
Não tem nenhum erro no console?
Tá usando o chrome?



abs.



2012/5/2 Luiz Gonzaga <lfi...@gmail.com>:
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "rails-go"
> dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para
> rails-go+u...@googlegroups.com.
> Para obter mais opções, visite esse grupo em
> http://groups.google.com/group/rails-go?hl=pt-BR.

Luiz Gonzaga

unread,
May 3, 2012, 3:30:57 AM5/3/12
to rail...@googlegroups.com
- Sim, usando o Chrome. Com o developer tools aberto e a opção de desabilitar cache marcada.
- Também acontece no firefox.
- O console dos dois navegadores não apontam nenhum erro.
- O log de rede mostra que foram disparadas sim as requisições e os jsons requisitados voltaram normalmente também...

Sergio, bom o sistema é grande, mas a parte mais direta, as chamadas no router, são essas:

route.js
routes : {
'!/questions'                                                                    : 'questions',
'!/:vertical/:site/questions'                                                    : 'questions',
'!/competition'                                                                  : 'competition',
'!/:vertical/:site/competition'                                                  : 'competition',
},

questions: function(vertical, site, fn) {
      if (!this.questionsView) {
        this.questionsView = new QuestionsView({
          _events: this._events
        });

        var self = this;

        this._events.bind('questions', function(vertical, site) {
          self.navigate('#!/'+vertical+'/'+site+'/questions');
        });
      }

      this.questionsView.bind('ready', function() {
        if (fn) fn(this);
      });

      this.questionsView.questions(vertical, site);
    },

competition: function(vertical, site, id, fn) {
      if (!this.competitionView) {
        this.competitionView = new CompetitionView({
          _events: this._events
        });

        var self = this;

        this._events.bind('competition', function(vertical, site) {
          self.navigate('#!/'+vertical+'/'+site+'/competition');
        });
      }

      this.competitionView.bind('ready', function() {
        if (fn) fn(this);
      });

      this.competitionView.competition(vertical, site);
    }

app.js
  window.App = window.App || {
    router: new Router()
  };

  return {
    initialize: function () {
      Backbone.history.start();
    }
  };

---------------------------------------------------------------

Já tentei fazer Backbone.history.start({pushState: true}) por desencargo de consciência, mas nada.
Também já tentei fazer a chamada do .navigate() passando {trigger: true} mas também não adiantou...

Alguma idéia?

2012/5/2 guilherme reis <guilhe...@gmail.com>

Leandro Camargo

unread,
May 3, 2012, 6:08:01 AM5/3/12
to rail...@googlegroups.com
Olá, Luiz.

1) nunca, mas nunca coloque código aqui diretamente. Em vez disso use o http://pastebin.com/.
2) cheque se a resposta da suas requisições Ajax são 200 OK ou 304 Not Modified.
3) você criou uma view para cada aba no Backbone?

2012/5/2 guilherme reis <guilhe...@gmail.com>

> Para obter mais opções, visite esse grupo em
> http://groups.google.com/group/rails-go?hl=pt-BR.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-go" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-go+unsubscribe@googlegroups.com.

Luiz Gonzaga

unread,
May 3, 2012, 6:42:41 AM5/3/12
to rail...@googlegroups.com
1) OK
2) Estão vindo 200 mesmo
3) Sim! Tudo separadinho em arquivos separados, inclusive os templates (erb)

:'(

2012/5/3 Leandro Camargo <leand...@gmail.com>
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/rails-go/-/3t7f2LPjr6wJ.

Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-go+u...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages