ember.js: динамические сегменты и запросы

У меня проблема с ресурсами в ember.js.

учитывая эти маршрутизаторы:

App.Router.map ->
  @route "index", path: "/"
  @resource "transport_documents", ->
    @resource "transport_document", path: ":transport_document_id"

и эти маршруты:

App.TransportDocumentsRoute = Ember.Route.extend
  model: -> App.TransportDocument.find()

App.TransportDocumentRoute = Ember.Route.extend
  model: (params)-> 
    App.TransportDocument.find(params.id)
  • когда я перехожу к /transport_documents, мой вызов на стороне сервера: /api/transport_documents, как и ожидалось
  • когда я перехожу к /transport_documents/1, я ожидаю, что этот вызов будет выполнен: /api/transport_documents/1, но это не так. нет звонков на мой сервер

Это ожидаемая ситуация? если нет, что мне сделать, чтобы заставить мое приложение выполнять этот запрос? Я хочу больше деталей в представлении шоу и меньше в индексе.

спасибо


person Alive Developer    schedule 18.04.2013    source источник


Ответы (2)


params будет содержать указанное вами имя динамического сегмента. В вашем случае вам нужно использовать:

model: (params)-> 
  App.TransportDocument.find(params.transport_document_id)

См. этот пример в руководстве по маршрутизации Ember для получения дополнительной информации. Информация.

person CraigTeegarden    schedule 18.04.2013
comment
измененный. по-прежнему никаких вызовов сервера, если я НАВИГАЮ по этому пути, проходящему от индекса. Он вызывает сервер, если я ДОСТУП непосредственно к URL-адресу /transport_documents/1 - person Alive Developer; 18.04.2013
comment
попробуйте вызвать App.TransportDocument.find(1) вручную и посмотреть, попадет ли он на ваш сервер - person CraigTeegarden; 18.04.2013
comment
оно делает. (отредактировал комментарий ранее). Может быть, он думает, что у меня уже есть все данные, которые мне могут понадобиться? - person Alive Developer; 18.04.2013
comment
если вы используете linkTo или transitionTo, вам нужно передать объект TransportDocument, и тогда он должен работать так же, как если бы вы запрашивали объект, используя find(transport_document_id) - person CraigTeegarden; 18.04.2013
comment
не так ли? {{#each Controller}}{{#linkTo transport_document this}}{{/each}}. Созданный им href правильный (transport_documents/1) - person Alive Developer; 18.04.2013
comment
это кажется правильным, что происходит, когда это происходит? он больше не попадет на ваш сервер, так как вы его уже загрузили. хук model вызывается только при прямой навигации по URL-адресу - person CraigTeegarden; 18.04.2013
comment
Ничего плохого. Я просто хотел бы, чтобы был выполнен еще один запрос. Итак, как я могу вызвать свою модель, когда я просматриваю этот URL-адрес? - person Alive Developer; 18.04.2013
comment
2 проблемы: 1, модель не будет вызываться каждый раз, так как вы передаете объект при использовании linkto, поэтому вы можете использовать хук setupController, который вызывается каждый раз. 2, двойной вызов find(id) приведет к тому, что кэшированный объект будет возвращен во второй раз, поэтому вам нужно найти способ заставить ember-data перезагрузить модель. - person CraigTeegarden; 18.04.2013
comment
очень хорошо. Теперь я знаю кое-что больше об эмбере. спасибо @c4p - person Alive Developer; 18.04.2013

Я оставлю ответ @c4p правильным, потому что он мне помог, но вот в чем проблема:

Это зависит от того, какую версию библиотеки ember-data вы используете.

См. здесь, чтобы узнать, как он ожидает форматирования связанных моделей.

person Alive Developer    schedule 19.04.2013