【问题标题】:Rerouting from existing Rails app to Ember从现有 Rails 应用程序重新路由到 Ember
【发布时间】:2013-08-07 18:57:41
【问题描述】:

简介

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

我有一个新模型: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 看到 URL“/newslinks”?

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

随机无关观察

Ember.js 看起来很像阅读 Borges 的迷宫,这是一件好事,而且我可以说它会在随后的阅读中变得更好,直到一切都变得完美。

【问题讨论】:

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


【解决方案1】:

我会使用 chrome 查看 Ember 请求的 URL。根据您指出的 url 是“/newslinks.json”,它可能请求不正确的“/newslinks”

在这种情况下,我会将路由从“/newslinks.json”更改为更合适的 REST url 格式“/newslinks”

【讨论】:

  • 嘿安德鲁,很难解析你的答案。您能否指出代码中我需要更改以适应您的答案的地方(Ember 固执己见)。如果有帮助,我很乐意提供更多信息。
  • 让我先澄清一下这个问题。再次阅读后,我意识到我可能误解了。您在浏览器中访问“/newslink”路由时遇到问题吗?还是数据没有从 API 返回到 Ember?
  • 遇到路由错误。在我看到模板渲染(使用 Ember)之前不担心数据。
  • root/#/newslinks 返回rails应用的根目录,首页,很诡异。
  • 我更新了问题以反映您提出的建议(我对本地代码所做的更改)并反映了 Ember 的 /javascripts 中的所有内容。 /#/newslinks 呈现应用程序的根目录(rails 当前主页),/newslinks 返回路由错误。
【解决方案2】:

为了使它工作,从您的 IndexRoute(这是隐式的并自动创建)重定向到您的 newslinks 路由,因为您在路由器映射 / 作为您的 newslinks 资源的路径。

例如,将此添加到您的应用中,它应该可以工作:

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

工作Demo

希望对你有帮助。

【讨论】:

  • 该演示确实有效,但我仍然无法通过 /newslinks 进行连接。路由错误。我在上面添加了我的 routes.rb 看看是否有帮助。
  • hhm,据我所知,您的 routes.rb 看起来不错(尽管我必须承认我不精通 Rails)
  • 是的,这正是我认为具有挑战性的,因为您有两个路由器。我知道其他人已经让它工作了,所以我会继续研究它并在我弄清楚时在这里发布。
猜你喜欢
  • 2013-08-08
  • 1970-01-01
  • 2013-10-26
  • 2015-11-24
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多