Обновление значений в полях

avatar
JingleBells
8 апреля 2018 в 08:30
337
1
0

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

Когда я перехожу на страницу с информацией о водителе и заполняю некоторые поля, такие как текстовое поле "водительские права", я не добавляю это в БД и нажимаю кнопку "вернуться" (чтобы отменить изменения и вернуться домой страница), когда я снова захожу на эту страницу, поля, которые я ранее заполнил данными, не очищаются и не обновляются (все поля должны быть чистыми и пустыми)

Есть ли у кого-нибудь решение для этого?

код кнопки "назад":

app.datasources.driver.clearChanges(function() {
    console.log("cleared changes");
});
returnToDriver();

код returnToDriver():

app.datasources.DRIVERS_LIST.query.clearFilters();
app.datasources.DRIVERS_LIST.load();
app.showPage(app.pages.Driver);

Уже пробовал:

widget.root.descendants.TextBox1.value = "";
widget.root.descendants.TextBox1.value  = null;

но у меня не работает.

С уважением

Источник

Ответы (1)

avatar
Pavel Shkleinik
9 апреля 2018 в 14:59
2

Потенциально существует несколько способов покинуть страницу:

  • навигация в браузере, включая горячие клавиши навигации
  • ссылки на странице, по которым можно перейти на другие страницы
  • кнопки/горячие клавиши навигации в приложении
  • и т.д...

Лучший способ справиться со всеми возможными сценариями навигации — использовать onDetach событие страницы

// Implicit way
// page onDetach event handler, assuming that page
// is bound to appropriate datasource:
// @datasources.<MyDatasource>.modes.create
widget.datasource.clearChanges();

// Explicit way
// Explicitly clearing changes for create datasources in
// page onDetach event handler
app.datasources.<MyDatasource1>.modes.create.clearChanges();
app.datasources.<MyDatasource2>.modes.create.clearChanges();
...

После того как вы добавите этот код в обработчик событий страницы onDetach, вы сможете удалить все остальные clearChanges вхождения со страницы.

JingleBells
9 апреля 2018 в 17:37
0

Здравствуйте Павел, Наверное я не лучшим образом выразился. Проблема в том, что у меня есть несколько текстовых полей на странице, которые не очищаются, когда я нажимаю кнопку «Назад». Сценарий 1: перейдите на страницу добавления драйвера и заполните текстовое поле 1, затем нажмите «назад» и перейдите на другую страницу. Когда я снова вхожу на страницу добавления драйвера, текстовое поле 1 имеет то же значение, которое я ввожу при первом входе на страницу добавления водителя. Когда я нажимаю «назад», мне нужно очистить текст в текстовом поле 1, чтобы в следующий раз я ввел это текстовое поле пустым.

Pavel Shkleinik
9 апреля 2018 в 18:25
0

Если виджет привязан к правому полю, его следует очистить. Попробуйте изменить источник данных формы на Inherited и источник данных страницы на @datasources.<MyDatasource>.modes.create

JingleBells
11 апреля 2018 в 21:24
0

Привет Павел, не могу попробовать. На этой странице есть 3 разных источника данных. У меня есть 3 панели, где поля привязаны к каждому полю источника данных панели. В моей кнопке «назад» я очищаю все 3 источника данных, но поля не ясны.

Pavel Shkleinik
11 апреля 2018 в 21:33
0

@JingleBells, я обновил свой ответ, чтобы разобраться с вашим делом.

JingleBells
11 апреля 2018 в 21:40
0

Это работало для текстовых полей. Единственная проблема сейчас состоит в том, чтобы очистить одну метку, которая называется widget.root.descendants.DrivePicker8.selectedDocName. Есть ли какое-либо решение для этого? PS: ваш рок на этом.

Pavel Shkleinik
11 апреля 2018 в 22:17
0

Хм... свойство Drive Pricker не очищается... Если вам нужно значение этого свойства, я рекомендую привязать его к полю черновой записи @datasource.item.DocName, а затем привязать это поле к Label. clearChanges() очистит оба поля и Label, однако свойство Drive Pricker сохранит значение, но конечный пользователь никогда его не увидит.