2013-03-06 11 views
5

Czy w Ember jest sposób skonfigurować niestandardowy URL usługi REST dla określonego modelu?Niestandardowy adres URL usługi REST dla określonego modelu

Jak z tego modelu:

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') 
}); 

A ten sklep:

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

chcę, że komentarze są pobierane poprzez /rest/post/{id}/comments zamiast /rest/comments które to zachowanie domyślne.
Czy można skonfigurować adres URL odpoczynku dla jednego określonego modelu?

+0

znalazłem GitHub kwestię dotyczącą tego przypadku: https://github.com/emberjs/data/issues/186 –

Odpowiedz

1

Czy jest to dosłownie tylko jeden model w całej aplikacji lub czy jest to domyślne "hasMany", które wykorzystuje Twój backend REST? Pytam, ponieważ moja api (framework django rest) używa tego dokładnego URI i wymagała pełnego polecenia ściągnięcia w projekcie ember-data, ponieważ aby zbudować adres URL, adapter potrzebuje powiązanego "rodzica" lub "właściciela" (coś, co nigdy nie zostało zainstalowane potrzebne, więc nie istniało).

Napisałbym swój własny adapter (tylko podklasę adaptera bazowego, abyś tylko nadpisał pojedynczy, który jest inny). Metoda, którą napisałem dla mojego adaptera jest poniżej i tutaj jest mój pełnowartościowy adapter dla odniesienia.

To jest wersja Ember-data 11 przyjazny btw (nie został uaktualniony do 12 jeszcze)

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

Można zarejestrować dodatkowy adapter i 'zakresu' to do swojego modelu.

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

bezpośrednio na pliku post.js modelu? Dzięki. – Soullivaneuh

Powiązane problemy