【问题标题】:Migrate Routes from Rails to Ember with Existing Rails Application using "ember-rails"使用“ember-rails”使用现有 Rails 应用程序将路由从 Rails 迁移到 Ember
【发布时间】:2013-08-08 03:11:47
【问题描述】:

对现有的 Rails 应用程序使用 gem“ember-rails”。我正在尝试使用 Ember 路由一个资源,许多人告诉我这段代码应该可以工作,但事实并非如此。

我想突破学习曲线并完成这项工作,但我需要一些帮助。

错误

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 并使用现有的 rails 路由进行渲染。

这与数据无关(只想使用 ember 渲染路线)。此外,这段代码在 jsbin 中工作,所以它也不是让 Ember 独立于 Rails 工作

我是否需要直接使用 rails 在 routes.rb 中渲染 Ember 路线?还是 Ember 路由位于 Rails 路由之上,并挑选它识别的路由?

【问题讨论】:

    标签: javascript ruby-on-rails-3 ember.js


    【解决方案1】:

    如果您将 ember 数据与 rest 适配器一起使用,则配置如下:

    鉴于此 url your-host/api/v1/newslinks 具有以下 json 结构:

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

    您只需要映射新闻链接路由:

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

    并在DS.RestAdapter中映射命名空间:

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

    Here 是一个使用休息适配器和模拟响应的现场演示。

    默认情况下,rails 将在没有 json 根路径的情况下提供 json:

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

    为了轻松完成这项工作,在 Rails 控制器中,只需将 :json 添加到您的 render 方法中,然后添加数据。所以 rails 会使用活跃的模型序列化器,并且根路径会出现:

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

    希望对你有帮助。

    【讨论】:

    • 嘿 Márcio,我按照您的指示进行操作,但没有成功。我仍然收到此错误:no route matches /newslinks 在允许显示数据之前,我正在尝试获取工作路线,但我什至无法显示页面。
    • 你想做单页应用吗?以 github.com/wulftone/rails-ember-example 为例,看看那个 repo
    • 我认为这个问题是因为您试图访问localhost/newslinks 而不是localhost/api/v1/newslinks。请。尝试访问那一秒。
    • 这给了我一个空白页,而如果我添加.json,我会从该网址取回我的数据。我认为这两个 url 都由 rails 路由器处理,对吗?我正在寻找的是如何使用 Ember 为“/newslink”或“/newslinks”创建新的路由和模板。当我去那里时,我仍然遇到路由错误。我还不需要连接到数据,我只想显示页面。
    • 好的,你必须使用#/newslink,因为ember默认响应hashchange。尝试访问该网址localhost:3000/#/newslink
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 2018-03-10
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多