Это вопрос, который у меня был с тех пор, как я начал изучать Ember, чтобы посмотреть, как это работает с Rails.Эмбер Маршруты и маршруты Rails
У Rails есть файл routes.rb с любым количеством существующих маршрутов. У Эмбера есть свой отдельный набор маршрутов.
Как браузер знает, что искать маршрут Ember, когда маршрут не существует в рельсах?
Кажется логичным, что рельсы должны будут перенаправить браузер в Ember, но я не видел ничего написанного нигде.
В большинстве случаев, когда существует существующее приложение rails, маршрут в route.rb играет роль превращения ресурса в api и делает данные доступными через URL-адрес.
эта часть был простой. Я могу видеть данные с использованием этого url.json
Я сейчас нахожусь на стадии попытки заставить браузер распознать один маршрут (из многих существующих в рельсах) через маршрутизацию Ember.
Это не имеет никакого отношения к показу данных. Я просто хочу увидеть рендеринг шаблона.
У меня возникает ощущение, что маршрут просто волшебным образом распознан браузером (без упоминания о маршруте Ember в routes.rb), основываясь на том, что происходит за кулисами в инфраструктуре Ember, но это не то, что я опытных в реальности.
Я получаю ошибку маршрутизации:
Started GET "/newslinks" for 127.0.0.1 at 2013-08-08 12:44:30 -0700 ActionController::RoutingError (No route matches [GET] "/newslinks"):
Вот мой 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
Вот мой 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')
});
Я было сказано, что это действительно должно работать, но это не так. Не уверен, куда еще обратиться за помощью в этот момент, поэтому, если у вас есть какие-либо рекомендации или у вас мало времени и вы хотите заниматься внештатными работниками, сообщите мне об этом.
Редактировать
Добавление routes.rb для справки:
namespace :api do
namespace :v1 do
resources :newslinks
end
end
Право. Rails не знает или не заботится о ember, но он должен быть настроен для обслуживания вашего приложения ember, когда запрашивается этот URL-адрес. –
Хорошо, отлично. Итак, я настроил свой ресурс как api (добавлен код на вопрос выше), но он обрабатывает только данные. Я не знаю, как «перенаправить», так что '/ newslinks' обрабатывается ember: –
Теперь вам понадобится маршрут рельсов для обслуживания приложения ember. Добавьте что-то вроде 'get 'newslinks', чтобы: 'ember # main'' в ваших маршрутах. Rb. Затем добавьте 'app/controllerlers/ember_controller.rb' и' app/views/ember/main.html.erb'. Убедитесь, что ваше представление содержит ссылку на 'application.js' и ваши шаблоны рулей. –