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,以便用户可以自由输入不属于建议的值。
无需进一步配置,小部件会自动注册到所有带有 ISearchableSource 的 zope.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
Buildout 配置
此软件包附带一个最小的 buildout 配置,允许运行测试。
$ python bootstrap.py $ bin/buildout $ bin/test
变更
0.7 (2015-12-09)
更新测试和代码以兼容 Python 2.7 和 ZTK 1.1.6。
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)
首次发布
注意:自动完成搜索视图仍缺少安全声明。这意味着任何人都可以查询源值。