2013-08-08 50 views
6

Đâ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 

Trả lời

5

How does the browser know to look for an Ember route when the route does not exist in rails?

Nó không. Khi bạn nhập một url trong trình duyệt, nó sẽ yêu cầu đến máy chủ, sau đó đường ray sẽ phản hồi với một số nội dung. Vì vậy, trong trường hợp này khi url "/ newslinks" được yêu cầu bạn muốn đường ray phản hồi với trang HTML bao gồm ứng dụng ember của bạn.

Khi trang đó được tải, ứng dụng ember sẽ khởi động và từ đó bộ định tuyến sẽ được sử dụng để xử lý các liên kết trong ngữ cảnh của ứng dụng ember của bạn.

Có ý nghĩa?

+0

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. –

+0

Đượ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: –

+0

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. –

Các vấn đề liên quan