# Как проверить, изменились ли данные в форме Form Toolkit?

**URL:** https://meta.discourse.org/t/how-to-see-if-form-toolkit-data-is-dirty/380228
**Category:** Development
**Created:** [25.Август.2025 19:04:01 UTC](https://meta.discourse.org/t/how-to-see-if-form-toolkit-data-is-dirty/380228 "2025-08-25T19:04:01Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [25.Август.2025 19:04:01 UTC](https://meta.discourse.org/t/how-to-see-if-form-toolkit-data-is-dirty/380228/1 "2025-08-25T19:04:01Z")

</div>

Продолжение обсуждения из [Набор инструментов Discourse для рендеринга форм](https://meta.discourse.org/t/discourse-toolkit-to-render-forms/326439)🙂

> [@system](#):
>
> `callback.isDirty` (boolean): Отслеживаемое свойство, возвращающее состояние формы. Оно будет true, как только в форму будут внесены изменения. Сброс изменений вернет его в false.

Я хочу, чтобы кнопка «Сохранить» была доступна только тогда, когда есть что сохранять.

Поиск `isDirty` во всех плагинах ничего не дал. Единственное место, где я вижу это в ядре, — это набор инструментов.

Наверняка есть способ проверить, должна ли кнопка сохранения быть активной.

У меня есть вот что:

```plaintext

export default class ServerCreate extends Component {
  @tracked formApi = null;
  @tracked isDirty = false;

  @action
  registerAPI(api) {
    console.log("registerAPI called", api);
    this.formApi = api;

    // api.onChange(() => {
    // console.log("onChange!", api.isDirty);
    // this.isDirty = api.isDirty;
    // });
  }

  get submitDisabled() {
    // formApi может быть undefined до регистрации формы
    console.log("submitDisabled", this);
    return !this.formApi?.isDirty;
  }

....

      
      <Form
        @data={{this.formData}}
        @onRegisterApi={{this.registerAPI}}
        @onSubmit={{this.handleSubmit}}
        as |form|
      >

```

и это (я перепробовал кучу вариантов):

```plaintext
            <form.Submit
              @label="pfaffmanager.server.save_button"
              class="save"
              @icon="check"
              @disabled={{this.registerAPI.isDirty}}
            />

```

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

Я смотрел на страницы настроек администратора, где, как я знаю, кнопка «Сохранить» отображается только при изменении данных, но кажется, что там не используется набор инструментов форм.

Я вижу, что моя функция `registerAPI(api)` вызывается, но не вижу `isDirty` в ней:

 ![image](https://global.discourse-cdn.com/meta/original/4X/4/5/b/45b7dce9ffe7f7d26ac8511a008f76597bab99c9.png)

А когда я вывожу её в лог, она выглядит просто как текст?

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/4/b/f4be1c6dd4f38cccf3f013af45f47b5eb22a2aba.png)

Конечно, `isDirty` — это то, когда я хочу, чтобы кнопка была включена, а не выключена, но другие примеры, которые я нашел (скорее всего, с `ask.discourse.com`), советовали сделать что-то вроде `@disabled={{not this.isDirty}}`, а конструкции `not` не существует, так что пока я был бы рад, если бы это работало наоборот.
