2013-08-08 5 views
6

Это вопрос, который у меня был с тех пор, как я начал изучать 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 

ответ

5

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

Это не делает. Когда вы вводите URL-адрес в браузере, он будет запрашивать сервер, а затем рельсы должны отвечать некоторым контентом. Поэтому в этом случае, когда запрашивается URL-адрес «/ newslinks», вы хотите, чтобы рельсы отвечали на HTML-страницу, содержащую ваше приложение ember.

Когда эта страница загружена, приложение ember будет загружаться, и с этого момента ember-router будет использоваться для обработки ссылок в контексте вашего приложения ember.

Имеют смысл?

+0

Право. Rails не знает или не заботится о ember, но он должен быть настроен для обслуживания вашего приложения ember, когда запрашивается этот URL-адрес. –

+0

Хорошо, отлично. Итак, я настроил свой ресурс как api (добавлен код на вопрос выше), но он обрабатывает только данные. Я не знаю, как «перенаправить», так что '/ newslinks' обрабатывается ember: –

+0

Теперь вам понадобится маршрут рельсов для обслуживания приложения ember. Добавьте что-то вроде 'get 'newslinks', чтобы: 'ember # main'' в ваших маршрутах. Rb. Затем добавьте 'app/controllerlers/ember_controller.rb' и' app/views/ember/main.html.erb'. Убедитесь, что ваше представление содержит ссылку на 'application.js' и ваши шаблоны рулей. –