2013-03-04 3 views
7

Так что у меня (как я думаю) общая проблема с Ember-данными. Мне интересно, как правильно настроить адаптер для адаптации к следующей ситуации.Субресурсы с emberjs + ember-data

Притворись У меня есть два объекта: Post и Tag

Вызывать App.Post.find() возвращает все сообщения GET ИНГ api.com/posts, App.Post.find(1) находится на api.com/posts/1. Это хорошо.

App.Tag.find() вернет все теги, доступные по api.com/tags. App.Tag.find(1) вернет соответствующий тег по правильному URL-адресу. Также хорошо.

Если я создаю новые сообщения через App.Post.createRecord({...}) Это будет POST по правильному адресу. То же самое касается создания Tags. Пока все денди.

Tags на Post встроены, потому что они «включены» в этот пост.

App.Adapter.map("App.Post", { 
    tags: {embedded: 'always'} 
}); 

Во время загрузки данные Ember все делают правильно, и я все еще очень счастлив.

Так что моя проблема связана с добавлением Tag в Post. Я хотел бы указать PUT или POST объект тега на api.com/posts/1/tags, где сервер будет выполнять все действия на стороне сервера.

В настоящее время

  1. Ember-данные, с множеством {embedded: 'always'} конфигурации, пошлет PUT к api.com/posts/1 со всеми Post объектом (с новым объектом Tag в комплекте) в качестве строковой строки JSON.

  2. Без набора {embedded: 'always'} конфигурации, Эмбер-данные будут пытаться PUT объект тега api.com/tags и отправит в Tag объекта с параметром post_id поэтому на стороне сервера может сделать все на стороне сервера вещи.

Я бы предпочел не делать 1, потому что мой сервер не настроен таким образом. Я бы предпочел не делать 2, потому что PUT/POST/GET s на api.com/tags действительно должен быть для части управления тегами моего приложения и не применять теги к сообщениям. Другим примером такого поведения является Github v3 API for Labels & Issues.

Кто-нибудь знает, как справиться с этим с помощью данных ember? Спасибо!

+0

Имея ту же самую проблему, о которой мы рассуждали по этому поводу, похоже, мало смысла, поскольку Ember RESTFul, нет? – andreimpop

+0

Эй @andreimpop Я закончил с использованием встроенного: «load», нашего собственного ajax для передачи на сервер и вручную управлял машиной состояний ember-data. Все это очень полезно - я планирую один повторить его, когда это станет правдой: http://emberjs.com/blog/2013/03/22/stabilizing-ember-data.html –

ответ

1

Вы можете рассмотреть возможность переопределения функции RESTAdapter # dirtyRecordsForHasManyChange для управления тем, как теги будут обрабатываться во время транзакции.

Но немного запутанно, что у вас нет встроенных связей, однако вы не хотите выполнять PUT на тегах во время изменений отношений модели Post. Я не уверен, что вижу проблему с привычным адаптером адаптера.

+0

Спасибо ... Я не уверен, что я Однако поймите, что это путаница. У меня есть встроенные отношения ... Они отлично работают при загрузке. Я бы просто добавил теги к сообщению, так как github добавляет метки к проблемам. См.: Http://developer.github.com/v3/issues/labels/#add-labels-to-an-issue –

+0

Извините. Теперь я понимаю. Вы захотите переопределить бит JSONSerializer # addHasMany и, возможно, даже JSONSerializer # addBelongsTo. Но поскольку вы делаете это так, это вызывает путаницу в отношении того, какая модель грязная (чтобы быть совершенной). Вы можете закончить копать довольно глубоко и, возможно, создать свой собственный адаптер. – clintjhill

+0

Эй, @clintjhill, не пожалеете! Я очень ценю вашу помощь! Еще раз спасибо за пролить свет –

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