GWT Деятельность и Места прохождения ссылок - PullRequest
7 голосов
/ 07 июня 2011

Как вы получаете объект из одного места в другое?

Например, у меня есть ContactsView с таблицей контактов и соответствующими классами ContactsActivity / Place.Если я хочу отредактировать контакт, я нажимаю на строку таблицы и захожу в ContactEditorPlace.Как ContactEditorView заставляет Контакт редактировать?

Приведенные мною примеры, похоже, имеют смысл не передавать фактические ссылки на объекты в Place, но вместо этого они сталкиваются с проблемой передачи String или id(например, образец расходов).Есть ли какая-то причина для этого, кроме простого токенизации?Есть ли какая-то причина, по которой ссылка не должна быть в месте?

Если ссылка на объект не установлена ​​в конструкторе ContactEditorPlace, то как она попадает в ContactEditorActivity?Это может быть сделано с помощью EventBus, но это будет много шаблонов для передачи одной ссылки на одно действие.

Я хотел бы отметить, что я не использую RequestFactory.

Ответы [ 3 ]

5 голосов
/ 07 июня 2011

На мой взгляд:

Нет проблем с передачей ссылок на объекты в конструктор места. Таким образом, вы можете легко передать контактную ссылку, нажав на строку, которую хотите редактировать.

Однако, вероятно, не стоит использовать весь этот объект в качестве токена. Я думаю, что лучше всего использовать его идентификатор, а затем извлечь объект из идентификатора при детокенизации и передать его конструктору.

Что касается примера расходов, я полагаю, это потому, что они используют фабрику запросов, в которой есть те локаторы сущностей, которые облегчают выборку сущностей на основе их идентификаторов.

2 голосов
/ 07 июня 2011

Если вы хотите разделить места, вы можете создать собственное событие, инкапсулирующее ваш объект, а затем передать это событие через шину событий.

Обновление:

ИсторияПоддержка мест осуществляется с помощью идентификаторов фрагментов (это официальный термин, Google называет их историей или токенами мест).Места создаются путем анализа FI (токенизации).Вы можете форматировать FI любым удобным для вас способом, но ограничением является то, что они являются строками.Формат FI может быть любым (например, # place / subplace: arg1: arg2).Задача вашего токенизатора состоит в том, чтобы проанализировать FI и создать Place.

В вашем случае FI может быть #contactedit: id.Таким образом, ваш токенайзер проанализирует этот токен, создав ContactEditorPlace, который содержит идентификатор контакта для редактирования.

1 голос
/ 08 июня 2011

Место предназначено также для представления жетона истории.В этом контексте значения в объекте Place становятся частью URL приложения.Это означает, что пользователь может в любой момент поместить URL-адрес в браузер, и объект Place восстанавливается по этому URL-адресу.Когда вы передаете ссылку на объект, этот объект не существует, когда пользователь просто передает URL-адрес.Я всегда использую в качестве общего правила, что значения, помещенные в объект Place, должны использоваться просто для уникальной идентификации или воссоздания определенного состояния приложения, а не значений, просто потому, что передача значения через место очень проста.

В этом случае вы можете передать идентификатор объекта в Place и получить объект из некоторого кэша, который вы храните в своем приложении (которое отправляется на сервер, если его нет в кэше), или напрямую получать объект с сервера..

...