跳转到主要内容

一个z3c.form小部件,用于控制编辑页面上的词汇或其他字段的显示

项目描述

https://travis-ci.org/collective/plone.formwidget.masterselect.svg https://coveralls.io/repos/collective/plone.formwidget.masterselect/badge.png

MasterSelectWidget

这是一个基于原始 Archetypes 小部件的 z3cform 小部件,用于控制编辑页面上的词汇或其他字段的显示。需要提供有关要控制的字段及其控制方式的信息。

请随意编辑此文档,以帮助更好地解释事物!

示例

更多复杂示例,请参阅包目录中的 demo.py

from zope import schema
from plone.supermodel import model
from plone.formwidget.masterselect import _
from plone.formwidget.masterselect import MasterSelectBoolField
from plone.formwidget.masterselect import MasterSelectField


class IMasterSelectDemo(model.Schema):
    """ MasterSelect Demo to demonstrate all options available to
        use and to allow the test modules a content type to work
        with.
    """

    masterField = MasterSelectField(
        title=_(u"MasterField"),
        description=_(u"This field controls the vocabulary of slaveField1,"
                      "the available values in slaveField1 will be equal "
                      "to the numbers between the selected number and 10. "
        values=(1, 2, 3, 4, 5, 6),
        slave_fields=(
            # Controls the vocab of slaveField1
            {'name': 'slaveField1',
             'action': 'vocabulary',
             'vocab_method': getSlaveVocab,
             'control_param': 'master',
            },
            # Controls the visibility of slaveField1 also
            {'name': 'slaveField1',
             'action': 'hide',
             'hide_values': ('6',),
             'siblings': True,
            },
        ),
        required=True,
    )

    slaveField1 = schema.Set(
        title=_(u"SlaveField1"),
        description=_(u"This field's vocabulary is controlled by the value "
                      "selected in masterField. The values available here "
                      "will be the numbers between the number selected in "
                      "masterField and 10. The field will be hidden when 6 "
                      "is selected in the masterField."),
        value_type=schema.Choice(values=(1, 2, 3, 4, 5, 6)),
        required=False,
    )

参数

所有魔法都发生在 slave_fields 参数中,该参数应是一个映射序列。每个映射描述了由主字段控制的一个字段

name

当选择改变时,要控制的字段名称。受控字段/小部件可以是任何类型,除非使用 'vocabulary' 或 'value' 操作。当操作是 'vocabulary' 时,字段必须使用 MultiSelectionWidget、SelectionWidget 或 MasterSelectWidget 之一,任何这些都必须设置 'format' 参数为 'select'(这是 MasterSelectWidget 的默认值)。对于 'value',小部件必须足够简单,可以使用 element.value 或 elem.selectedIndex(StringWidget、SelectionWidget、AutoCompleteWidget 等)更改当前值。

masterID

这是可选的,如果省略则将自动计算。它可以用来指定在 HTML 文档中渲染的确切主字段。通常您只需要为复选框主字段设置此值,因为它们的 ID 会添加一个 -0,如下所示:#form-widgets-checkboxfield-0。请注意,这是一个 jQuery ID 选择器。

masterSelector

这是可选的,如果未定义则默认为 master ID。它具有与 masterID 相同的用法,但允许指定任何 jQuery 选择器(不仅是一个 ID)。

您将使用此选项与单选按钮主字段,例如选择所有输入

‘masterSelector’: ‘input[name=”form.widgets.my_master_field”]’,

slaveID

这是可选的,如果省略则将自动计算。它可以用来指定在 HTML 表单中要控制的确切从字段名称。请注意,这是一个 jQuery ID 选择器,因此请使用类似这样的选择器:#form-widgets-field

action

对从字段执行的操作类型。这可以是

vocabulary

使用 XMLHttpRequest 调用更改从字段的词汇。要使用 vocabulary 操作,从字段必须满足上述小部件要求。

enabledisable

切换以将目标小部件标记为启用或禁用;要使用 enable / disable 操作,字段必须使用可以启用/禁用的 HTML 小部件。

showhide

切换以将目标小部件标记为显示或隐藏。

value

更改另一个简单小部件(StringWidget)的值,在选择改变时使用 XMLHttpRequest 调用。

attr

更改由 slaveID 指定的 DOM 元素的值

jquery

尚未实现 将发送回 DOM 以执行的一个完整的 jQuery 语句。

vocab_method

要调用来检索从字段的动态词汇或 'value' 时从字段值的函数名称。对于 'vocabulary',此函数必须返回一个 DisplayList。对于 'value',它必须返回一个字符串或 msg_id。该函数必须接受一个参数,该参数将用于传递在主小部件中选择的新的值。此参数的名称默认为 'master_value',但可以使用任何名称,只要使用 control_param 元素指定即可。仅在 'action':'vocabulary' 或 'action':'value' 时使用。

control_param

如上所述,这是在调用 vocab_method 时使用的参数名称。仅在 'action':'vocabulary'、'action':'value'、'action':'attr' 和 'action':'jquery' 时使用。

hide_values

一组值,在主部件中选择时,将导致从属字段/部件隐藏、显示或禁用。所使用的方法由“action”元素确定。仅与“action”:‘hide’、‘action’:‘enable’、‘action’:‘disable’或‘action’:‘show’一起使用。值‘()’(不要使用引号)将触发任何内容。

兄弟节点

布尔值,表示是否选择从属字段的兄弟节点以及从属字段本身。此字段仅可用于“action”:‘hide’或“action”:‘show’,并可用于隐藏标签和从属字段。

empty_length

在从属字段中选择条目时,从选择框开始删除条目的位置,当选择框使用新数据刷新时。在选择框选项删除之前执行Ajax调用,因此不能在此调用完成之前使用。这可以防止出现小的选择框,其第一个选项为“————-”。此字段是可选的,并且仅可用于“action”:‘vocabulary’。在初始化Ajax请求之前也会检查此值。如果主选择框长度等于或小于此数字,则Ajax请求将不会执行,以帮助防止从属部件执行顺序混乱。默认值为0。

prevent_ajax_values

一组值,在主部件中选择时将阻止部件初始化Ajax请求。使用(‘’)作为值来阻止如果选择框值是‘’的Ajax调用。默认为()。

initial_trigger

布尔值,表示主部件是否应在加载时初始触发。默认为true,除了vocabulary以外的所有内容,在这种情况下为false,以防止执行通常不需要的初始Ajax调用。

单个MasterSelectWidget可以控制任意数量的从属字段,新字段通过向从属字段列表/元组中添加新映射来控制。一个作为MasterSelectWidget动作目标的字段本身可以使用MasterSelectWidget来控制其他字段。

MasterSelectDemo类型包括不同配置的主从部件。默认情况下是禁用的,但您可以通过portal_setup工具导入它,并通过在portal_types工具中的MasterSelectDemo条目中检查“隐式可添加”复选框来测试它。

祝您玩得开心!

与ContactChoice的特殊情况

从collective.contact.widget 1.8开始,您可以使用ContactChoice字段作为主字段,但它需要为masterID和masterType属性进行特殊配置。以下是一个示例

organization = ContactChoice(
    title=_(u"Organization"),
    required=True,
    source=ContactSourceBinder(obj_types=('organization',)),
    slave_fields=(
        {'name': 'department',
         'masterID': 'form-widgets-organization-input-fields',
         'masterType': 'ContactChoice',
         'slaveID': '#form-widgets-department',
         'action': 'vocabulary',
         'vocab_method': get_organization_directions_vocabulary,
         'control_param': 'selected_organism',
         'initial_trigger': True
         },
    )
)

作者

Archetypes Widget的原始作者

贡献者

变更日志

3.0.0 (2024-06-05)

  • 修复非根虚拟主机环境中的JSON调用URL。修复#37 [erral]

  • 停止支持Python 3.7。[wesleybl]

2.0.1 (2021-09-16)

  • 在Firefox中点击另一个选项卡时隐藏编辑表单中的默认选项卡。修复#32 [wesleybl]

  • 修复字段实现的接口。[wesleybl]

  • 在包中使用compile False。[wesleybl]

  • 修复资源css未找到。修复#23 [wesleybl]

  • 删除旧的升级步骤。[wesleybl]

2.0.0 (2021-05-27)

  • 添加对Python 3(Plone 5.2.2)的支持。停止支持Python 2.7和3.6。[wkbkhard, laulaz]

  • 修复加载编译的js资源。[alessandro.ceglie]

  • 修复翻译过程中的错误。[pbauer]

  • 修复buildout / Travis。[tisto, wkbkhard]

1.7 (2019-11-13)

  • 移除已废弃的simplejson依赖。[keul]

  • 从通用设置依赖中移除plone.app.jquerytools。[keul]

  • 修复JavaScript:页面刷新时从从属字段中未重新选择旧值。[keul]

1.6 (2016-10-11)

  • 添加可选支持collective.contact.widget >= 1.8中的ContactChoice作为主字段。[vincentfretin]

  • 在updateSelect中触发liszt:updated事件,以强制更新来自collective.z3cform.chosen的选中的从属字段。[vincentfretin]

  • 修复视觉问题:在一个覆盖层中,对每个复选框或单选选项只切换一次。[thomasdesvenain]

  • 修复包元数据和trove分类器。[hvelarde]

1.5.2 (2016-08-08)

  • 使用zope2.View代替cmf.AddPortalContent作为masterselect-jsonvalue视图。在编辑表单中,用户不一定有添加门户内容的权限。[vincentfretin]

1.5.1 (2016-01-08)

  • 修复更新field.vocabulary时的副作用。现在在更改词汇表之前复制字段。[vincentfretin]

1.5 (2015-11-24)

  • 当整个词汇表被替换时,翻译“vocabulary”从属字段的术语(如“无值”)。[sgeulette]

1.4.1 (2014-10-30)

  • jQuery 1.9兼容。[vincentfretin]

1.4 (2014-10-09)

  • masterselect.js现在可缓存。[vincentfretin]

  • 迁移到plone.app.testing。将selenium测试从windmill迁移到robotframework。[saily]

  • 添加travis和coveralls集成。[saily]

  • 更新文档。修复CHANGES.rst中的rst错误。向README.rst添加一个示例。[saily]

  • 添加包含egg的buildout。[saily]

1.3 (2014-06-16)

  • 在初始触发时不要使用快速过渡。[thomasdesvenain]

  • 主选择功能在表单在覆盖层中加载时正常工作。[thomasdesvenain]

  • 修复当masterselect在一个不可见的fieldset中时出现的错误。[cedricmessiant]

  • 添加主选择单选小部件和指定主选择器而不是masterID的能力。[ebrehault]

1.2 (2013-11-04)

  • 在显示/隐藏函数上添加了一个(“快速”)jQuery过渡。[thomasdesvenain]

1.1 (2013-08-26)

  • 与z3c.form 3.0和jQuery 1.6+兼容。注意:此版本不再与jQuery 1.4兼容。请使用plone.formwidget.masterselect 1.0用于版本 < 4.3的plone。[vincentfretin]

1.0 (2013-06-10)

  • 在生成的脚本中将jq替换为jQuery。[vincentfretin]

  • 移除plone.directives.form依赖。移除plone.app.jquerytools依赖。修复演示配置文件。进行了一些清理。[cedricmessiant]

  • 初次提交,准备测试。[JMehring]

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪一个,请了解更多关于安装包的信息。

源分布

plone.formwidget.masterselect-3.0.0.tar.gz (38.2 kB 查看哈希)

上传时间

构建分布

plone.formwidget.masterselect-3.0.0-py3-none-any.whl (32.9 kB 查看哈希)

上传于 Python 3

由以下支持