2013-03-06 4 views
5

Gibt es in Ember eine Möglichkeit, eine benutzerdefinierte REST-URL für ein bestimmtes Modell zu konfigurieren?Benutzerdefinierte REST-URL für spezifisches Modell

Wie bei diesem Modell:

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

Und Store:

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

Ich möchte, dass die Kommentare über /rest/post/{id}/comments statt /rest/comments abgerufen werden, die das Standardverhalten ist.
Ist es möglich, eine Rest-URL für ein bestimmtes Modell zu konfigurieren?

+0

fand ich eine Github Frage in Bezug auf diesen Fall: https://github.com/emberjs/data/issues/186 –

Antwort

1

Ist dies buchstäblich nur für ein Modell in Ihrer gesamten App oder ist dies die standardmäßige "hasMany" -Uri, die Ihr REST-Backend verwendet? Ich frage, weil meine API (Django Rest Framework) diese exakte URL verwendet und es eine vollständige Pull-Anforderung für das ember-data Projekt benötigt, da zum Erstellen der URL der Adapter den zugehörigen "Eltern" oder "Besitzer" benötigt (etwas rails devs nie benötigt, damit es nicht existierte).

Ich würde Ihren eigenen Adapter schreiben (nur Unterklasse der Basisadapter, so dass Sie nur die einzige hasMany überschreiben, die anders ist). Die Methode, die ich für meinen Adapter geschrieben habe, ist unten und hier ist mein voll ausgebildeter Adapter als Referenz.

Diese glut-Datenrevision 11 freundlich btw ist (nicht auf 12 noch aufgewertet)

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

Sie können einen zusätzlichen Adapter registrieren und 'Umfang' es zu Ihrem Modell.

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

Direkt am post.js Modell-Datei? Vielen Dank. – Soullivaneuh

Verwandte Themen