跳转到主要内容

z3c.form 的 AJAX 自动完成小部件

项目描述

版权所有 (c) 2009-2015 gocept gmbh & co. kg 保留所有权利。

此软件受Zope公共许可证第2.1版(ZPL)的规定。应随此发行版附带一份ZPL副本。本软件按“原样”提供,并明确或暗示地放弃了包括但不限于标题、适销性、非侵权性和适用于特定用途的任何保证。

自动完成小部件

gocept.autocomplete为z3c.form提供了一个自动完成小部件。如果您想为字段提供一个建议列表,但又想接受任何其他输入,则此小部件很有用。

要使用小部件,请使用 <include package=”gocept.autocomplete”> 并提供一个实现 gocept.autocomplete.interfaces.ISearchableSource 的源。这意味着两点,一是您的源必须提供搜索()方法,以便可以查询值(使用已输入的内容作为查询),二是您必须始终从 __contains__() 方法返回 True,以便用户可以自由输入不属于建议的值。

无需进一步配置,小部件会自动注册到所有带有 ISearchableSourcezope.schema.IChoice 字段。

例如,我们使用 testbrowser 运行 gocept.autocomplete.tests.color 中的代码。

>>> import zope.app.testing.functional
>>> root = zope.app.testing.functional.getRootFolder()
>>> import gocept.autocomplete.tests.color
>>> house = gocept.autocomplete.tests.color.House()
>>> root['house'] = house
>>> import zope.testbrowser.testing
>>> b = zope.testbrowser.testing.Browser()
>>> b.handleErrors = False

自动完成小部件是增强型 TextWidget。因此,在显示模式下,它表现得就像一个 TextWidget。

>>> b.open('http://localhost/house')
>>> print b.contents
<?xml...
...<span id="form-widgets-color" class="text-widget autocomplete required choice-field"></span>...

但在编辑模式下,它会产生额外的 JavaScript 代码。

>>> b.addHeader('Authorization', 'Basic mgr:mgrpw')
>>> b.open('http://localhost/house')
>>> print b.contents
<?xml...
...<script src=".../autocomplete-min.js"...
...<input id="form-widgets-color"...
...<div id="form-widgets-color-container"...
...DS_XHR("http://localhost/house/@@index.html/++widget++color/@@autocomplete-search"...
...new YAHOO.widget.AutoComplete( "form-widgets-color", "form-widgets-color-container"...

自动完成通过在部件上注册的视图来填充。

>>> b.open('http://localhost/house/@@index.html/++widget++color/@@autocomplete-search')
>>> print b.contents
>>> b.open('http://localhost/house/@@index.html/++widget++color/@@autocomplete-search?q=r')
>>> print b.contents
red
ruby

但我们仍然可以输入任何我们想要的值并保存它(使此功能工作需要两个部分,一是源必须在 __contains__() 方法中始终返回 True,二是部件使用一个特殊的 TitledTokenizedTerm,该 TitledTokenizedTerm 使用实际值作为一切)。

>>> b.open('http://localhost/house')
>>> b.getControl('Color').value = 'foo'
>>> b.getControl(name='form.buttons.apply').click()
>>> print b.contents
<?xml...
...foo...

分组表单

一个特殊案例是分组表单,它们在其组中提供字段定义。为此,我们设置了一个公寓组和一个表单。

>>> apartment = gocept.autocomplete.tests.color.Apartment()
>>> root['apartment'] = apartment

分组表单的部件遍历返回正确的搜索结果。

>>> b.open('http://localhost/apartment/@@grouped.html/++widget++color/@@autocomplete-search?q=r')
>>> print b.contents
red
ruby
>>> b.open('http://localhost/apartment/@@grouped.html/++widget++number/@@autocomplete-search?q=1')
>>> print b.contents
12A
12

开发 gocept.autocomplete

作者:

gocept <mail@gocept.com>

PyPI 页面:

http://pypi.python.org/pypi/gocept.autocomplete/

问题跟踪器:

https://bitbucket.org/gocept/gocept.autocomplete/issues/

源代码:

https://bitbucket.org/gocept/gocept.autocomplete/

当前变更日志:

https://bitbucket.org/gocept/gocept.autocomplete/src/tip/CHANGES.txt

Buildout 配置

此软件包附带一个最小的 buildout 配置,允许运行测试。

$ python bootstrap.py
$ bin/buildout
$ bin/test

变更

0.7 (2015-12-09)

0.6 (2013-04-23)

  • 切换到 jQuery UI 和 Fanstatic 而不是 YUI 和 zc.resourcelibrary

0.5 (2011-01-11)

  • configure.zcml 不再包含 zope.app.zcmlfiles,它已移动到 ftesting.zcml

  • 在 README 中描述了对 zc.resourcelibrary 的依赖关系,这使得此软件包与使用 hurry.resource 的软件包不兼容。

0.4 (2010-06-17)

由 Roman Joost <roman@mooball.com> 贡献。

  • 添加了对分组表单的支持。

  • 添加了分隔符字符、最小查询长度和自动填充功能的配置选项。

0.3 (2010-02-26)

  • 以稍微不同的方式“估计”部件 URL:使用表单的上下文,而不是 getContent() 方法:如果内容使用适配器重定向,则该视图可能不存在。

0.2 (2009-02-23)

  • 将部件注册到具有 ISearchableSource 的 IChoice 字段。此功能依赖于 z3c.form>=r96460(将包含在 z3c.form-2.0 中)。

  • 改进了文档。

0.1 (2009-02-06)

  • 首次发布

  • 注意:自动完成搜索视图仍缺少安全声明。这意味着任何人都可以查询源值。

项目详情


下载文件

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

源分发

gocept.autocomplete-0.7.tar.gz (15.8 kB 查看哈希)

上传时间 源代码

由以下提供支持