Bri*_*ugh 6 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路由识别单个路由(轨道中存在许多路由)的阶段.
这与显示数据无关.我只想看模板渲染.
根据Ember框架中幕后发生的事情,我觉得这条路线只是被浏览器神奇地识别出来(没有提及routes.rb中的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
Run Code Online (Sandbox Code Playgroud)
这是我的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')
});
Run Code Online (Sandbox Code Playgroud)
我被告知这实际上应该有效,但事实并非如此.目前还不确定在哪里可以寻求帮助,所以如果您有任何建议或有一点时间并希望自由撰稿,请告诉我.
编辑
添加routes.rb以供参考:
namespace :api do
namespace :v1 do
resources :newslinks
end
end
Run Code Online (Sandbox Code Playgroud)
当路由不存在于rails中时,浏览器如何知道查找Ember路由?
它没有.当您在浏览器中输入网址时,它会向服务器发出请求,然后rails会响应某些内容.因此,在这种情况下,当请求"/ newslinks"url时,您希望rails使用包含您的ember应用程序的HTML页面进行响应.
当加载该页面时,ember应用程序将启动并从那里使用ember-router来处理你的ember应用程序上下文中的链接.
合理?