2013-08-06 34 views
3

將gem「ember-rails」用於現有軌道應用程序。我試圖使用Ember路由一個資源,並且有很多人告訴我這個代碼應該工作,但事實並非如此。使用「ember-rails」將軌道從Rails遷移到Ember使用「ember-rails」

我想突破學習曲線並完成這項工作,但我需要一些幫助。

錯誤

Routing Error 
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 

application.handlebars

<!DOCTYPE html> 
<html> 
<head> 
<meta name="description" content="Ember - Latest" /> 
<meta charset=utf-8 /> 
<title>Ember Latest</title> 
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css" rel="stylesheet"> 
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/js/bootstrap.min.js"></script> 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://builds.emberjs.com/handlebars-1.0.0.js"></script> 
    <script src="http://builds.emberjs.com/ember-latest.js"></script> 
    <script src="http://builds.emberjs.com/ember-data-latest.js"></script> 
</head> 
<body> 
    <script type="text/x-handlebars"> 
    <h2>Here I am</h2> 
    </script> 
</body> 
</html> 

結論

請讓我知道你會如何建議設置只有一個途徑:/ newslinks通過Ember並使用現有的導軌路線進行渲染。

這不是關於數據(只是想使用餘燼渲染路線)。此外,這段代碼在jsbin中工作,所以它也沒有關於讓Ember獨立於rails的工作

我需要引導rails來呈現routes.rb中的Ember路由嗎?或者是Ember路線坐在軌道路線的頂部並且櫻桃選擇它識別的路線?

回答

2

如果您使用的是有其他適配器餘燼數據的配置如下:

鑑於此URL your-host/api/v1/newslinks具有以下JSON結構:

{ 
    newslinks: [ 
    {id: 1, name: 'foo'}, 
    {id: 2, name: 'bar' } 
    ] 
} 

你只需要映射newslinks路由:

App.Router.map(function() { 
    this.resource('newslinks', { path: '/' }); 
}); 

和MAP在DS.RestAdapter命名空間:

DS.RESTAdapter.reopen({ 
    namespace: 'api/v1' 
}); 

是一個使用休息適配器和嘲諷響應的現場演示。

默認情況下軌將服務於JSON沒有JSON的根路徑:

[ 
    {id: 1, name: 'foo'}, 
    {id: 2, name: 'bar' } 
] 

要輕鬆地得到這個工作,在Rails控制器只需添加:jsonrender方法,其次是數據。因此,導軌將使用主動型號串行器,並且根路徑將存在:

def index 
    @users = User.all 
    render json: @users 
end 

我希望它有幫助。

+0

嘿Márcio,我按照你的指示,但沒有工作。我仍然得到這個錯誤:'沒有路線匹配/新聞鏈接'我試圖讓路線工作,才允許數據顯示,但我不能讓頁面甚至顯示。 –

+0

你想製作一個單頁的應用程序嗎?看看回購示例https://github.com/wulftone/rails-ember-example –

+0

我認爲這個問題是因爲你試圖訪問'localhost/newslinks'而不是'localhost/api/v1/newslinks '。請。嘗試訪問那一秒。 –