Playframework: Хак для подстановки переменной в route на этапе выполнения javascript

Допустим, вам надо сформировать на этапе выполнения джаваскрипта из маршрута (route) ссылки вида:

/entity/editform/5
/entity/editform/6

Сам маршрут такой:

GET 	/entity/editform/:id controllers.EntityController.entityEdit(id:Long)

При этом, в scala виде (view) внутри javascript вы можете располагать только переменной entity.id (получили массив сущностей с помощью ajax). Поэтому вызов вида:

...
url: '@routes.EntityController.entityEdit(entity.id)';

будет вызывать ошибку на этапе компиляции scala: во view — в области видимости scala — нет объекта entity c полем id. Но ведь какое-то число скормить скале надо! Что же можно тут сделать?

Можно вспомнить, что Long может принимать и отрицательные значения. В то же время, сущность в ID отрицательные числа иметь не может. Значит можно вызвать:

var editUrl = '@adminnew.routes.PromocodeController.promocodeRenderEditForm(-10)';

и получить: entity/editform/-10
А потом сделать замену:

editUrl.replace("-10", entity.id);

Такая замена не сможет испортить ссылку для редактирования какой-то сущности, т.к. сущностей с отрицательным ID не существует в нормальных условиях. Если все-таки в вашем проекте существуют, то придется покумекать. Возможно, надо будет назначить численное значение, которое обрабатывается особым образом.

You can leave a response, or trackback from your own site.

One Response to “Playframework: Хак для подстановки переменной в route на этапе выполнения javascript”

  1. Aleksanlub:

    Очень долго искал инфу в сети, пока не нашел этот сайт.
    Для меня информация на этом сайте оказалась очень полезной.
    Всем успехов!

Leave a Reply