6

这是我自从开始研究 Ember 以了解它如何与 Rails 一起工作以来一直存在的问题。

Rails 有一个 routes.rb 文件,其中包含任意数量的现有路由。Ember 有自己独立的一组路由。

当 Rails 中不存在路由时,浏览器如何知道要查找 Ember 路由?

rails 需要将浏览器重定向到 Ember 似乎是合乎逻辑的,但我没有看到任何地方写过。

在大多数存在现有 rails 应用程序的情况下,routes.rb 中的路由扮演将资源转换为 api 并通过 url 提供数据的作用。

那部分很容易。我可以使用该 url.json 查看数据

我现在正处于尝试让浏览器通过 Ember 路由识别单个路由(在 Rails 中存在的许多路由)的阶段。

这与显示数据没有任何关系。我只想看看模板渲染。

我感觉路由只是被浏览器神奇地识别(在 routes.rb 中没有提到 Ember 路由),基于 Ember 框架中幕后发生的事情,但这不是我在现实中所经历的。

我不断收到路由错误:

Started GET "/newslinks" for 127.0.0.1 at 2013-08-08 12:44:30 -0700 ActionController::RoutingError (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
4

1 回答 1

5

当 Rails 中不存在路由时,浏览器如何知道要查找 Ember 路由?

它没有。当您在浏览器中输入一个 url 时,它会向服务器发出请求,然后 rails 应该会响应一些内容。因此,在这种情况下,当请求“/newslinks”url 时,您希望 rails 响应包含您的 ember 应用程序的 HTML 页面。

加载该页面后,ember 应用程序将启动,并且 ember-router 将用于处理您的 ember 应用程序上下文中的链接。

说得通?

于 2013-08-08T20:10:50.757 回答