2012-10-22 32 views
5

Chúng tôi đang triển khai tính năng sử dụng dữ liệu Ember và Rails và tiếp tục nhấn một cú đánh. Chúng tôi không chắc đó có phải là vấn đề với mã của chúng tôi hay không, một lỗi với dữ liệu Ember hoặc Ember hoặc chỉ là chúng tôi không nhận được nó do thiếu tài liệu.Các liên kết Ember và các URL lồng nhau

Mọi trợ giúp sẽ thực sự được đánh giá cao.

Rails

Chúng tôi có một việc cần làm, với nhiều mục. Trong Rails, họ được thiết lập như sau:

class ToDo < ActiveRecord::Base 
    has_many :to_do_entries, dependent: :destroy 
    alias_method :entries, :to_do_entries 
    validates_presence_of :title 
end 

class ToDoEntry < ActiveRecord::Base 
    attr_accessible :completed_at, :is_deleted, :priority, :title 

    belongs_to :to_do 
    alias_method :parent, :to_do 

    validates_presence_of :to_do, :title  
end 

Các tuyến đường được thiết lập là lồng nhau:

resources :to_dos do 
    resources :to_do_entries do 
    end 
end 

Và vì thế các URL cuối kết thúc được /to_do /: to_do_id/to_do_entry /: to_do_entry_id.

Chúng tôi đang sử dụng active_model_serializers đá quý và có các serializers sau thành lập:

class ToDoSerializer < ActiveModel::Serializer 
    attributes :id, 
      :title 

    has_many :to_do_entries, embed: :objects 
end 

class ToDoEntrySerializer < ActiveModel::Serializer 
    attributes :id, 
      :to_do_id, 
      :title, 
      :priority 

    has_one :to_do 
end 

Ember

Chúng tôi đang sử dụng dữ liệu Ember và adapter REST và các mô hình tương đương được thiết lập như sau:

App.ToDo = DS.Model.extend({ 
    title: DS.attr('string'), 
    entries: DS.hasMany('App.ToDoEntry', { embedded: true }) 
}); 

App.ToDoEntry = DS.Model.extend({ 
    title: DS.attr('string'), 
    to_do_id: DS.attr('number'), 
    priority: DS.attr('number'), 
    todo: DS.belongsTo('App.ToDo') 
}); 

Sự cố

hiểu biết của tôi là chúng ta sẽ có thể truy cập vào danh sách các mục trực tiếp từ ToDo, bằng cách sử dụng sau đây trong giao diện điều khiển:

> t = App.ToDo.find(21) 
> e = t.get("entries") 

này dường như để làm việc, nhưng chỉ trả về một lớp học và Tôi không có ý tưởng làm thế nào để gỡ lỗi nó và xem nếu nó làm việc.

Tôi có hai câu hỏi cụ thể:

  1. Làm sao chúng ta có thể gỡ lỗi, sử dụng giao diện điều khiển, các hiệp hội và chắc chắn rằng họ đang làm việc một cách chính xác.

  2. Nếu chúng tôi tải các mục riêng biệt (thay vì để chúng được nhúng trong phụ huynh), làm cách nào chúng tôi có thể sử dụng các tuyến đường lồng nhau như chúng tôi có ở trên?

+0

Bạn có thể làm điều gì đó như 't.get (" mục "). toArray()'. Bạn sẽ có thể xác minh ID. Và bạn có thể làm một cái gì đó như 't.get (" mục "). ToArray() [0] .get ('title')' để kiểm tra một thuộc tính đã cho. Tôi không tin rằng các tuyến làm tổ được hỗ trợ ra khỏi hộp với phần phụ REST. Thực ra có một [vấn đề] (https://github.com/emberjs/data/issues/170) về nó mà tôi đã mở và nó đã bị đóng. Tôi chưa có cơ hội để thử triển khai các tuyến lồng nhau trong bộ điều hợp của mình (hiện tại tôi đang sử dụng một công việc trên máy chủ). –

Trả lời

4

Thứ nhất, việc kết hợp từ mô hình trả về số DS.ManyArray chứa các đối tượng như bạn đã giả định.
Có một số cách để gỡ lỗi điều này, trước hết nó phản hồi các phương thức mảng bình thường như length, firstObject, lastObject, objectAt.
Nếu điều đó không đủ hữu ích, nó cũng phản hồi toArray chuyển đổi nó thành một mảng vani JS.

Thật không may, sự lặp lại mới nhất của dữ liệu ember thực sự loại bỏ các bản ghi được nhúng (tôi nghĩ điều này có thể là tạm thời).URL nguồn hiện lồng không được hỗ trợ bởi các RESTAdapter mặc định, nhưng bạn luôn có thể tùy chỉnh nó cho phù hợp với nhu cầu của bạn

Có tuy nhiên công việc đang được thực hiện trên nhận được nguồn lực lồng vào cốt lõi thấy PR của #367#257

+0

Tuyệt vời, cảm ơn. Điều đó thực sự hữu ích. Có vẻ như chúng tôi đã có một nửa ở đó, nhưng có vấn đề với việc đặt tên và người thổi phồng (hoặc thiếu). Tôi sẽ viết một bài đăng trên blog để chia sẻ những gì chúng tôi đã tìm thấy trên đường đi. –

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