使用Ember.js时是否需要构建Rails视图



我正在更新一个Rails应用程序以使用Ember.js。在集成Ember之前,应用程序中存在的那些视图仍然可以正常工作,但我也添加了几个新视图。这些视图具有所有必要的ember部分(模板、控制器等),以及所有Rails部分,不包括视图文件。

如果用户通过单击内部链接访问这些视图,则这些视图可以正常工作。然而,如果用户重新加载页面或手动输入URL,那么我会收到以下错误:

ActionView::MissingTemplate at /contribute
Missing template pages/contribute, application/contribute with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee]}. Searched in:
  * "/home/sites/whistlr/app/views"
  * "/home/.rvm/gems/ruby-2.0.0-p0@whistlr/gems/devise-3.0.0/app/views"

这显然是因为我没有视图文件。问题是,这绝对有必要吗?有没有办法告诉Rails只加载Ember视图?理想情况下,我只需要在对话完成后删除所有旧的Rails视图文件。

这不是必要的,但您需要设置rails routes.rb,以具有一个catch-all路由,该路由也可以像显示ember应用程序及其html的索引页面一样进行渲染。

namespace :api do
  # resources go here
end
root :to 'home#index'
match "/*path" => 'home#index'

注意:你想为你的项目自定义这个路径模式,否则404也会发送到这里。

不需要创建单独的视图。诀窍是在应用程序控制器中捕获异常,然后强制它呈现布局:

class ApplicationController < ActionController::Base
  rescue_from ActionView::MissingTemplate do |exception|
    render "/layouts/application"
  end
end

最新更新