Ember Маршруты и Рельсовые Маршруты
Это вопрос, который у меня возник с тех пор, как я начал изучать Ember, чтобы посмотреть, как он может работать с Rails.
В Rails есть файл rout.rb с любым количеством существующих маршрутов. У Эмбер свой собственный набор маршрутов.
Как браузер узнает, что нужно искать маршрут Ember, если он не существует в рельсах?
Казалось бы логичным, что rails нужно будет перенаправить браузер на Ember, но я нигде этого не видел.
В большинстве случаев, когда существует существующее приложение rails, маршрут в route.rb играет роль превращения ресурса в API и делает данные доступными через URL.
Эта часть была легкой. Я могу видеть данные, используя этот url.json
Сейчас я нахожусь на этапе попытки заставить браузер распознавать один единственный маршрут (из множества существующих в рельсах) через маршрутизацию Ember.
Это не имеет ничего общего с показом данных. Я просто хочу увидеть шаблон рендера.
У меня такое ощущение, что браузер волшебным образом распознает маршрут (без какого-либо упоминания маршрутизации Ember в маршрутах.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')
});
Мне сказали, что это на самом деле должно работать, но это не так. Не уверен, куда еще обратиться за помощью в данный момент, поэтому, если у вас есть какие-либо рекомендации или у вас мало времени и вы хотите заняться фрилансом по этому вопросу, пожалуйста, дайте мне знать.
редактировать
Добавление маршрутов.rb для справки:
namespace :api do
namespace :v1 do
resources :newslinks
end
end
1 ответ
Как браузер узнает, что нужно искать маршрут Ember, если он не существует в рельсах?
Это не так. Когда вы вводите URL-адрес в браузере, он отправляет запрос на сервер, после чего rails должен ответить некоторым содержимым. Таким образом, в этом случае, когда запрашивается URL-адрес "/newslinks", вы хотите, чтобы rails отвечал HTML-страницей, содержащей ваше приложение ember.
Когда эта страница загружена, приложение ember загрузится, и оттуда ember-router будет использоваться для обработки ссылок в контексте вашего приложения ember.
Есть смысл?