Ember路由和路轨路线

时间:2013-08-08 19:47:33

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

这是我自从开始研究Ember以来看看它如何与Rails一起工作时所遇到的问题。

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

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

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

在大多数现有rails应用程序的情况下,routes.rb中的路由扮演着将资源转换为api并通过URL使数据可用的角色。

那部分很容易。我可以使用url.json

查看数据

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

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

我感觉路由只是被浏览器神奇地识别(没有提到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

1 个答案:

答案 0 :(得分:5)

  

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

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

当加载该页面时,ember应用程序将启动并从那里使用ember-router来处理你的ember应用程序上下文中的链接。

有意义吗?