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
Dobrze. Rails nie zna ani nie dba o ember, ale powinien być skonfigurowany do obsługi twojej aplikacji ember, kiedy ten URL jest wymagany. –
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: –
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. –