2013-07-24 51 views
1

我正在更新Rails應用程序以利用Ember.js。在集成ember之前,應用程序中存在的那些視圖仍然可以正常工作,但我還添加了幾個新視圖。這些視圖具有所有必要的餘燼部分(模板,控制器等),以及除視圖文件之外的所有Rails部分。使用Ember.js時,是否有必要構建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/[email protected]/gems/devise-3.0.0/app/views" 

這顯然發生,因爲我沒有查看文件。問題是,這是嚴格必要的嗎?有什麼方法可以讓Rails加載Ember視圖嗎?理想情況下,一旦對話完成,我只需刪除所有舊的Rails視圖文件。

+2

您的問題更多地是關於路由,然後關於視圖。 默認情況下Ember路由器將其路徑放在URL錨點中,採用這種方式:'http:// example.com/rails_path#/ ember_path' 雖然Rails路由器在URL路徑上工作。 請分享您的routes.rb和App.Router的片段,以便我們知道路徑是什麼。 – chrmod

+0

我正在使用'Whistlr.Router.reopen位置:'history'',它取消了哈希標記。認爲這可能會干擾這一點? – nullnullnull

回答

1

沒有必要創建單獨的視圖。訣竅是捕捉應用程序控制器中的異常,然後強制它呈現佈局:

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

這是沒有必要的,但你需要設置軌道routes.rb有一個捕獲所有的路線,也呈現就像你的索引頁面顯示的應用程序的應用程序和它的HTML。

namespace :api do 
    # resources go here 
end 

root :to 'home#index' 
match "/*path" => 'home#index' 

注意:您想要自定義此路徑模式到您的項目,否則404s也將發送到此處。

+0

這很好,但只有當我不需要通過Rails控制器的數據。例如,如果我去「/組織」,Rails控制器通常會通過json發送@organizations。採用這種方法,我沒有得到json,大概是因爲rails路徑並不指向rails組織控制器。也許還有別的東西我錯過了? – nullnullnull

+0

對,你還需要在此之前定義你的'資源'。例如使用'/ api'命名空間。看我的編輯。 –

+0

在資源的情況下,似乎仍然有必要創建一個Rails視圖? – nullnullnull

相關問題