2013-03-06 3 views
5

Есть ли способ в Ember для настройки пользовательского URL REST для конкретной модели?Пользовательский URL REST для конкретной модели

Как с этой моделью:

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

И этот магазин:

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

Я хочу, что комментарии извлекаются с помощью /rest/post/{id}/comments вместо /rest/comments, который является поведением по умолчанию.
Можно ли настроить URL-адрес отдыха для одной конкретной модели?

+0

Я нашел вопрос GitHub по этому делу: https://github.com/emberjs/data/issues/186 –

ответ

1

Это для буквально только для одной модели по всему вашему приложению или это по умолчанию «hasMany» uri, который использует ваш backstream? Я спрашиваю, потому что мой api (django rest framework) использует этот точный uri, и для проекта URL-адреса требуется полный запрос на растягивание, потому что для создания URL-адреса адаптеру нужен соответствующий «родитель» или «владелец» (что-то rails devs никогда необходимо, чтобы этого не было).

Я бы написал свой собственный адаптер (просто подкласс базового адаптера, чтобы вы только переопределили единственный hasMany, который отличается). Метод, который я написал для моего адаптера, приведен ниже, и здесь приведена моя полная версия адаптера для справки.

Это пересмотр 11 дружественных уголек-данных BTW (не повышен до 12 лет пока)

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

Вы можете зарегистрировать дополнительный адаптер и «объем» это для вашей модели.

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

непосредственно на post.js файл модели? Благодарю. – Soullivaneuh

Смежные вопросы