从现有的Rails应用程序重新路由到Ember

时间:2013-08-07 18:57:41

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

简介

这是我第一次尝试Ember(现有的rails应用程序),并且在interWeb上有一些很好的资源,但鉴于我已经阅读了所有内容并且仍然需要更多资源,这里检查笔记会很棒。< / p>

我有一个新模型:Newslink 我为它构建了一个api:api/v1/newslinks.json api有效:http://localhost:3000/api/v1/newslinks.json

数据

{"newslinks":[{"id":1,"title":"A Sample Post","navlink":"This will be a simple post record."}]}

代码

问题在于Ember似乎让这条路线漏过了我的手(我在下面的代码中做错了,我敢肯定):

的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')
    });

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>

的routes.rb

App::Application.routes.draw do

  namespace :api do
    namespace :v1 do
      resources :newslinks
    end
  end

我甚至都没有尝试返回数据。只是想看到路由连接,但我收到路由错误。我如何确保Ember看到网址“/ newslinks”?

如果您有任何建议,请告诉我。谢谢!

随机无关观察

Ember.js似乎很像阅读博尔赫斯的 Labyrinths ,这是一件好事,我可以告诉它在随后的阅读中会变得更好,直到一切都完全正确。

2 个答案:

答案 0 :(得分:1)

我会使用chrome查看Ember请求的URL。可能会根据您指出的网址'/ newslinks.json'来请求'/ newslinks'不正确

在这种情况下,我会将路径从'/newslinks.json'更改为更合适的REST网址格式'/ newslinks'

答案 1 :(得分:1)

要使其工作从您的IndexRoute(隐式并自动创建)重定向到您的路由器地图newslinks中的/路由声音,作为{newslinks的路径1}}资源。

例如,将此添加到您的应用中,它应该有效:

App.IndexRoute = Ember.Route.extend({
  redirect: function() {
    this.transitionTo('newslinks');
  }
});

工作Demo

希望它有所帮助。