这是我自从开始研究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
答案 0 :(得分:5)
当路由不存在于rails中时,浏览器如何知道查找Ember路由?
没有。当您在浏览器中输入网址时,它会向服务器发出请求,然后rails会响应某些内容。因此,在这种情况下,当请求“/ newslinks”网址时,您希望rails使用包含您的ember应用程序的HTML页面进行响应。
当加载该页面时,ember应用程序将启动并从那里使用ember-router来处理你的ember应用程序上下文中的链接。
有意义吗?