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.

Есть смысл?

Другие вопросы по тегам