2013-03-25 15 views
6

Oto ramy używam:Routing problemy z CodeIgniter i backbone.js

  • CodeIgniter
  • CodeIgniter REST API
  • Require.js
  • backbone.js

Uruchamianie aplikacji:

  • Plik htaccess przekierowuje wszystko przez plik Codeigniter index.php.
  • Istnieje domyślna konfiguracja trasy w Kodzie sygnalizacyjnym, aby wywołać kontroler "Start".
  • Kontroler uruchamiania wywołuje widok początkowy (jedyny widok w Codeigniter).
  • Widok początkowy zawiera szablon dla całej witryny i wywołuje żądanie uruchomienia Require.js
  • Uruchomienie Require.js Szkielet i aplikacja działają zgodnie z oczekiwaniami.

Problem: Routing innym Szkieletowymi Wyświetleń:

  • Teraz chcę trasa przez kręgosłup innych "poglądów" kręgosłupa.
  • Problem polega na tym, że próbuję podać łącze takie jak "localhost/otherPage" w pliku HtF, który uruchamia plik htaccess, a Codeigniter próbuje znaleźć tego kontrolera, a otrzymam 404 wygenerowany przez Codeigniter.
  • Próbowałem wymusić trasę w Backbone zamiast HREF za pomocą `app.navigate (" otherPage ", {trigger: true});`, ale pojawia się ten sam błąd 404 generowany przez Codeigniter.

jakim kierunku należy zabrać ze sobą:

  • chciałbym nadal korzystać z CodeIgniter do jej spokojny API, modele i kilka specjalnych funkcji walidacji.
  • Chcę również użyć kręgosłupa i wymagania z przodu.
  • Czy mogę zmienić przekierowanie htacess do pliku index.html, który uruchamia Require and Backbone. Czy kontrolery API RESTFUL programu Codeigniter nadal będą poprawnie uruchamiać, jeśli użyję tego podejścia?
  • Czy mogę utworzyć widok w Codeigniter dla każdej strony i czy każda strona zaczyna się Wymagać + Kręgosłup nowego dla każdego widoku?
  • Wkrótce zajrzę do Node.js. Czy powinienem po prostu wykorzenić aspekt Codeignitera w ramach frameworka i przejść cały proces na Node.js?

Wszelkie wskazówki są mile widziane.

Odpowiedz

3

Jeśli jeszcze tego nie zrobiłeś, możesz wykonać trasę przez szkielet przez zmiany hashtag (to jest jego normalne zachowanie, pushState: false), ponieważ modyfikowanie hashtagu nie spowodowałoby żadnego połączenia z serwerem, a zatem ignorowanie routera Codeigniter.
W tym przykładzie należy przejść do lokalizacji localhost/# otherPage.
Następnie użyj routera Codeigniter do połączeń REST ajax ajax.

+0

Więc mam kosza mój plik .htaccess i mają szkielet załadować pliku start.index? Kiedy zadzwonię do RESTFUL API w Codeigniter, czy framework uruchomi się (z autoloadami itp.) Przez wywołanie kontrolera? To jest główny problem, który mam problemy ze zrozumieniem. – Lowkase

+0

Nie, nadal możesz zachować oba routery, ponieważ nie działają jednocześnie: Router szkieletowy będzie obsługiwał zmiany hashtagów (po stronie klienta, nie będziesz nawiązywał połączenia z serwerem), CodeIgniter będzie obsługiwać zmiany adresu URL (po stronie serwera) , zadzwoń na serwer - na pewno tylko twoje wywołania AJAX REST). Twoje wywołania REST będą musiały być routowane przez CodeIgniter (nigdy nie używane) RESTFUL API. – Loamhoof

+0

@Lowkase Rozwiązanie proponowane przez Loamhoof jest całkowicie w porządku. Aby odpowiedzieć na twoje pytanie: wywołania REST API do CodeIgniter uruchomią autoloady framework'a. Codeigniter nie rozróżnia żądania GET od przeglądarki lub od Backbone .fetch(). Pytanie brzmi: dlaczego potrzebujesz routera CodeIgniter? Zrzuć widok części MVC Codeigniter'a i zastąp go w całości MV * kręgosłupa. Wszystkie routing odbywa się za pomocą routera Backbone z wyjątkiem pierwszego wywołania start.index.html, które ładuje twoje RequireJs/Backbone. –

1

Innym sposobem na to, aby Twoja przeglądarka nie przesłała żądania http z łączem HREF, jest zastąpienie go javascriptem i jquery. Może być przydatny, jeśli nie chcesz zawsze używać hashtagów, jak zasugerował Loamhoof.

Przykład:

$('#linkID').on('click', function(event) { 

    event.preventDefault(); 

    backboneRouter.navigate($(event.currentTarget).attr('href'), { trigger:true }); 

});