Đây là câu hỏi mà tôi đã từng kể từ khi tôi bắt đầu nghiên cứu Ember để xem nó có thể hoạt động như thế nào với Rails.Tuyến đường và tuyến đường ray Ember
Rails có tệp routes.rb với bất kỳ số lượng tuyến đường hiện có nào. Ember có tập hợp các tuyến đường riêng.
Trình duyệt biết cách tìm tuyến đường Ember khi tuyến đường không tồn tại trong đường ray?
Có vẻ hợp lý khi đường ray cần phải chuyển hướng trình duyệt tới Ember, nhưng tôi chưa từng thấy nó được viết ở bất kỳ đâu.
Trong hầu hết các trường hợp có ứng dụng đường ray hiện có, tuyến đường trong routes.rb đóng vai trò chuyển tài nguyên thành api và làm cho dữ liệu có sẵn thông qua url.
Phần đó thật dễ dàng. Tôi có thể xem dữ liệu bằng url.json
Tôi hiện đang ở giai đoạn cố gắng làm cho trình duyệt nhận ra một tuyến đường duy nhất (trong số nhiều tuyến đường hiện có trong đường ray) thông qua định tuyến Ember.
Điều này không liên quan gì đến việc hiển thị dữ liệu. Tôi chỉ muốn xem bản vẽ mẫu.
Tôi có cảm giác rằng tuyến đường chỉ được trình duyệt công nhận một cách kỳ diệu (không đề cập đến định tuyến Ember trong routes.rb) dựa trên những gì xảy ra đằng sau khung cảnh Ember, nhưng đó không phải là những gì tôi đã có kinh nghiệm trong thực tế.
tôi tiếp tục nhận được một lỗi định tuyến:
Started GET "/newslinks" for 127.0.0.1 at 2013-08-08 12:44:30 -0700 ActionController::RoutingError (No route matches [GET] "/newslinks"):
Đây là application.js tôi
//= 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
Đây là app.js tôi:
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')
});
Tôi đã được cho biết rằng điều này thực sự nên được làm việc, nhưng nó không phải. Bạn không chắc chắn nơi nào khác để giúp đỡ tại thời điểm này, vì vậy nếu bạn có bất kỳ đề xuất hoặc có một chút thời gian và muốn tự do về vấn đề này, xin vui lòng cho tôi biết.
Sửa
Thêm routes.rb để tham khảo:
namespace :api do
namespace :v1 do
resources :newslinks
end
end
Phải. Rails không biết hoặc quan tâm đến ember, nhưng nó sẽ được thiết lập để phục vụ ứng dụng ember của bạn khi url đó được yêu cầu. –
Được rồi, tuyệt. Vì vậy, tôi thiết lập tài nguyên của tôi như là một api (thêm mã vào câu hỏi ở trên), nhưng điều đó chỉ xử lý dữ liệu. Những gì tôi không biết là làm thế nào để "chuyển hướng" để '/ newslinks' được xử lý bởi ember: –
OK bây giờ bạn sẽ cần một tuyến đường ray để phục vụ các ứng dụng ember. Thêm một cái gì đó như 'get 'newslinks', để: 'ember # main'' trong routes.rb của bạn. Sau đó, thêm 'app/controllers/ember_controller.rb' và' app/views/ember/main.html.erb'. Hãy chắc chắn rằng khung nhìn của bạn bao gồm một tham chiếu đến các mẫu 'application.js' và handlebars của bạn. –