2013-03-06 8 views
5

Có cách nào trong Ember định cấu hình một url REST tùy chỉnh cho một Mô hình cụ thể không?Url REST tùy chỉnh cho Mô hình cụ thể

Giống như với mô hình này:

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    comments: DS.hasMany('App.Comment') 
}); 
App.Comment = DS.Model.extend({ 
    content: DS.attr('string'), 
    post: DS.belongsTo('App.Post') 
}); 

Và cửa hàng này:

app.Store = DS.Store.extend({ 
    revision : 11, 
    adapter : DS.RESTAdapter.extend({ 
     namespace : 'rest' 
    }) 
}); 

Tôi muốn rằng các ý kiến ​​được lấy thông qua /rest/post/{id}/comments thay vì /rest/comments đó là hành vi mặc định.
Có thể định cấu hình một url còn lại cho một Mô hình cụ thể không?

+0

Tôi tìm thấy vấn đề về github về trường hợp này: https://github.com/emberjs/data/issues/186 –

Trả lời

1

Đây có phải chỉ dành cho một mô hình trên toàn bộ ứng dụng của bạn hay đây là url "hasMany" mặc định mà chương trình phụ trợ REST của bạn sử dụng? Tôi hỏi vì api (django rest framework) của tôi sử dụng uri chính xác này và nó yêu cầu một yêu cầu kéo đầy đủ về dự án dữ liệu ember bởi vì để xây dựng URL, bộ điều hợp cần "cha mẹ" hoặc "chủ sở hữu" liên quan cần thiết để nó không tồn tại).

Tôi sẽ viết bộ điều hợp riêng của bạn (chỉ cần phân lớp bộ điều hợp cơ sở để bạn chỉ ghi đè duy nhất hasMany khác nhau). Các phương pháp tôi đã viết cho bộ chuyển đổi của tôi là dưới đây và đây là bộ chuyển đổi thổi đầy đủ của tôi để tham khảo.

Đây là ember dữ liệu phiên bản 11 thân thiện btw (chưa nâng cấp lên 12 chưa)

https://github.com/toranb/ember-data-django-rest-adapter/blob/master/tests/adapter.js

findMany: function(store, type, ids, parent) { 
     var json = {} 
     , root = this.rootForType(type) 
     , plural = this.pluralize(root) 
     , ids = this.serializeIds(ids) 
     , url = this.buildFindManyUrlWithParent(store, type, ids, parent); 

     this.ajax(url, "GET", { 
      success: function(pre_json) { 
       json[plural] = pre_json; 
       Ember.run(this, function(){ 
        this.didFindMany(store, type, json); 
       }); 
      } 
     }); 
    }, 
2

Bạn có thể đăng ký một bộ chuyển đổi bổ sung và 'phạm vi' nó sang mô hình của bạn.

App.Store.registerAdapter('App.Post', DS.RESTAdapter.extend({ 
    url: "/rest/post/" 
})); 
+0

Trực tiếp trên tệp mô hình post.js? Cảm ơn. – Soullivaneuh