Короче ...
При создании приложения Ember.js для сохранения в приложении Rails, как мне обрабатывать маршрутизацию / просмотры Rails? Я бы подумал, что мне просто нужен Rails для рендеринга макета application.html.erb, чтобы приложение Ember.js инициализировало и обрабатывало маршрутизацию / просмотр / шаблоны.
Подробности:
В частности, если я захожу на localhost: 3000 до того, как мое приложение Ember.js сможет инициализироваться, Rails выполнит действие "index" в проектах em > контроллер. Он будет жаловаться на отсутствие шаблона индекса. У меня нет представления index.html.erb, поскольку в моем приложении Ember.js есть представление / шаблон для него.
Должен ли я создавать пустые представления для приложения Rails? Должны ли действия моего контроллера Rails что-то возвращать, чтобы предотвратить рендеринг представления? Или я должен создать обычные представления Rails, которые будут работать вместе с представлениями / шаблонами приложения Ember.js?
Если я создам пустой файл projects / index.html.erb и перейду на localhost: 3000, Rails отобразит его, Ember.js будет инициализировать и обрабатывать маршрутизацию с этого момента. Однако, если я захожу непосредственно на localhost: 3000 / projects / new, Rails жалуется на отсутствие нового действия в контроллере проектов. У меня нет "нового" действия в контроллере projects на стороне Rails, поскольку оно мне не нужно. Мое приложение Ember.js обрабатывает этот вид / шаблон.
В конце концов, я просто не уверен, в каком соглашении предполагается использовать Ember.js вместе с приложением Rails.
Спасибо за помощь и за то, что дочитали до этого места ...
Изменить:
Я упустил деталь о том, что пытаюсь использовать возможность маршрутизатора Ember.js использовать pushState история. Это оставит мне URL без хэшбэга. Это одна из причин, по которой у меня возникают проблемы с Rails, конкурирующим за маршрутизацию моего приложения.
Макет приложения Rails:
<html>
<body>
<section id="design-archive"></section>
</body>
</html>
Приложение Ember.js:
@DA = Em.Application.create
name: 'Design Archive'
VERSION: '0.1'
rootElement: '#design-archive'
ApplicationController: Em.Controller.extend()
ApplicationView: Em.View.extend
templateName: 'application'
DA.initialize(DA.Router)
Маршруты Rails:
DesignArchive::Application.routes.draw do
resources :clients, :only => [:new, :create, :index, :show, :destroy]
resources :projects, :only => [:new, :create, :index, :show, :destroy]
root :to => 'projects#index'
end
Маршруты Ember.js:
DA.Router = Em.Router.create
location: 'history'
root: Em.Route.extend
index: Em.Route.extend
route: '/'
redirectsTo: 'projects'
# Actions
doProjects: (router) ->
router.transitionTo('projects')
doProjectsNew: (router) ->
router.transitionTo('newProject')
# Routes
projects: Em.Route.extend
route: '/projects'
index: Em.Route.extend
router: '/'
connectOutlets: (router) ->
router.get('applicationController').connectOutlet('projects', DA.Project.find())
showProject: Em.Route.transitionTo('project')
project: Em.Route.extend
route: '/projects/:project_id'
connectOutlets: (router, project) ->
router.get('applicationController').connectOutlet('project', project)
projectsIndex: Em.Route.transitionTo('projects')
newProject: Em.Route.extend
route: '/projects/new'
connectOutlets: (router) ->
router.get('applicationController').connectOutlet('projectsNew')
Контроллер Rails:
class ProjectsController < ApplicationController
def index
@projects = Project.all
respond_to do |format|
format.html
format.json { render json: @projects }
end
end
end