Spec-Zone.ru › Wagtail 2

API виджетов формы на стороне клиента

Для динамического создания полей формы в интерфейсе редактирования StreamField, все виджеты Django форм, используемые в блоках StreamField, должны иметь соответствующую реализацию на JavaScript, определяющую, как виджет отображается на стороне клиента, как заполняется данными, и как извлекаются данные из этого поля. Wagtail предоставляет эту реализацию для виджетов, наследующих от django.forms.widgets.Input, django.forms.Textarea, django.forms.Select и django.forms.RadioSelect. Для других типов виджетов или таких, которые требуют пользовательского поведения на стороне клиента, вам необходимо предоставить собственную реализацию.

Библиотека telepath используется для настройки соответствия между классами виджетов Python и их соответствующими реализациями на JavaScript. Для создания соответствия определите подкласс wagtail.core.widget_adapters.WidgetAdapter и зарегистрируйте его с помощью wagtail.core.telepath.register.

from wagtail.core.telepath import register
from wagtail.core.widget_adapters import WidgetAdapter

class FancyInputAdapter(WidgetAdapter):
    # Identifier matching the one registered on the client side
    js_constructor = 'myapp.widgets.FancyInput'

    # Arguments passed to the client-side object
    def js_args(self, widget):
        return [
            # Arguments typically include the widget's HTML representation
            # and label ID rendered with __NAME__ and __ID__ placeholders,
            # for use in the client-side render() method
            widget.render('__NAME__', None, attrs={'id': '__ID__'}),
            widget.id_for_label('__ID__'),
            widget.extra_options,
        ]

    class Media:
        # JS / CSS includes required in addition to the widget's own media;
        # generally this will include the client-side adapter definition
        js = ['myapp/js/fancy-input-adapter.js']


register(FancyInputAdapter(), FancyInput)

Объект JavaScript, связанный с экземпляром виджета, должен предоставлять единственный метод:

Состояние виджета часто совпадает со значением поля формы, но может содержать дополнительные данные, помимо тех, которые обрабатываются при отправке формы. Например, виджет выбора страницы состоит из скрытого поля формы, содержащего идентификатор страницы, и только для чтения метки, отображающей заголовок страницы: в этом случае, сам идентификатор страницы не предоставляет достаточной информации для отображения виджета, и поэтому состояние определяется как словарь с id и title элементами.

Значение, возвращаемое render — это объект «связанного виджета», позволяющий получить доступ к данным этого экземпляра виджета. Этот объект должен реализовывать следующие атрибуты и методы:

  • Предыдущая Ссылка на справочник блоков StreamField
  • Следующая Модули Contrib

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v2.16.3/reference/streamfield/widget_api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API