2013-08-08 11 views
6

To jest pytanie, które miałem od kiedy zacząłem studiować Ember, aby zobaczyć, jak to może działać z Railsami.Ember Routes and Rails Routes

Railsy mają plik routes.rb z dowolną liczbą istniejących tras. Ember ma własny, oddzielny zestaw tras.

W jaki sposób przeglądarka wie, że należy szukać trasy Ember, gdy trasa nie istnieje w szynach?

Wydawałoby się logiczne, że szyny będą musiały przekierować przeglądarkę na Ember, ale nie widziałem tego nigdzie indziej.

W większości przypadków, gdy istnieje już aplikacja szyn, trasa w routes.rb odgrywa rolę przekształcenia zasobu w api i sprawia, że ​​dane są dostępne za pośrednictwem adresu URL.

Ta część była łatwa. Widzę dane za pomocą tego adresu url.json

Jestem teraz na etapie próbowania, aby przeglądarka rozpoznała jedną trasę (wielu istniejących w szynach) poprzez routing Ember.

Nie ma to nic wspólnego z wyświetlaniem danych. Chcę tylko zobaczyć renderowanie szablonu.

Mam wrażenie, że trasa jest po prostu magicznie rozpoznawana przez przeglądarkę (bez żadnej wzmianki o routingu Embera w routes.rb) w oparciu o to, co dzieje się za kulisami w ramach Ember, ale to nie jest to, co mam doświadczony w rzeczywistości.

ciśgle błędu ułożenia:

Started GET "/newslinks" for 127.0.0.1 at 2013-08-08 12:44:30 -0700 ActionController::RoutingError (No route matches [GET] "/newslinks"):

Oto moje application.js

//= require jquery 
//= require jquery-ui 
//= require jquery_ujs 
//= require jquery-fileupload/basic 
//= require jquery-fileupload/vendor/tmpl 
//= require chosen-jquery 
//= require bootstrap 
//= require bootstrap-notify 
//= require jquery.limit-1.2.source 
//= require bootstrap-switch 
//= require handlebars 
//= require ember 
//= require ember-data 
//= require_self 
//= require app 

Oto moje app.js:

App = Ember.Application.create({ 
    LOG_TRANSITIONS: true, 
    ready: function() { 
    console.log('App ready'); 
    } 
}); 

App.Router.map(function() { 
    this.resource('newslinks', { path: '/' }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
    this.transitionTo('newslinks'); 
    } 
}); 

App.NewslinksRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Newslink.find(); 
    } 
}); 

DS.RESTAdapter.reopen({ 
    namespace: 'api/v1' 
}); 

App.Store = DS.Store.extend({ 
    revision: 13 
}); 

App.Newslink = DS.Model.extend({ 
    name: DS.attr('string') 
}); 

mam powiedziano mi, że to powinno działać, ale tak nie jest. Nie wiesz, gdzie jeszcze zwrócić się o pomoc w tej sprawie, więc jeśli masz jakieś zalecenia lub masz trochę czasu i chcesz pracować w tym temacie, daj mi znać.

Edit

Dodawanie routes.rb dla odniesienia:

namespace :api do 
    namespace :v1 do 
     resources :newslinks 
    end 
    end 

Odpowiedz

5

How does the browser know to look for an Ember route when the route does not exist in rails?

nie. Po wprowadzeniu adresu URL w przeglądarce, zostanie wysłane żądanie do serwera, a następnie szyny powinny odpowiedzieć pewną treścią. Tak więc w tym przypadku, gdy żądany jest URL "/ newslinks", chcesz, aby szyny odpowiadały na stronie HTML zawierającej twoją aplikację ember.

Po załadowaniu tej strony, aplikacja ember zostanie uruchomiona, a stamtąd router ember zostanie użyty do obsługi linków w kontekście twojej aplikacji ember.

Sens?

+0

Dobrze. Rails nie zna ani nie dba o ember, ale powinien być skonfigurowany do obsługi twojej aplikacji ember, kiedy ten URL jest wymagany. –

+0

Okay, świetnie. Tak więc skonfigurowałem mój zasób jako api (dodałem kod do powyższego pytania), ale to tylko obsługuje dane. Nie wiem, w jaki sposób "przekierować", aby '/ newslinks' był obsługiwany przez ember: –

+0

OK, teraz będziesz potrzebował trasy szyny do obsługi aplikacji ember. Dodaj coś w rodzaju 'get 'newslinks', do: 'ember # main'' w twoich routes.rb. Następnie dodaj 'app/controllers/ember_controller.rb' i' app/views/ember/main.html.erb'. Upewnij się, że twój widok zawiera odniesienie do 'application.js' i twoich szablonów kierownicy. –

Powiązane problemy