Yoh*_*art 7 dojo zend-framework dijit.form
我在Zend表单上一起使用dojo FilteringSelect元素,但我不能让它按照我想要的方式工作.我有三个字段商店id,label,name.标签将用于下拉列表,也应该用于搜索,同时name应该用于框内的显示.问题是我无法找到使这种行为有效的方法.
将labelAttr值设置为label在下拉列表中显示它的工作,但是searchAttr一旦选择了值,该属性将控制搜索和输入框上的显示.我需要搜索该label字段,因为它是许多字段的集合,但显示值name,是否可能?
编辑:@RichardAyotte Dijit FilteringSelect小部件使用dojo.data.store,它基本上是一个javascript对象,其中每个项目也是一个具有许多参数的对象.您可以在商店中设置两个特殊参数:labelAttr和searchAttr,它们将定义一些行为.FilteringSelect绑定到您可以搜索的INPUT框.如果单击该框,它将打开选项列表,如a将.在这里它显示你定义为labelAttr的任何东西.现在,如果您在框中键入内容,它将使用searchAttr字段上定义的内容在商店中进行搜索.一旦您从列表中选择了某些内容,它也会使用标签的值显示在输入内部(您可以在此处查看http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html#displaying-富文本菜单标签与labelattr-and-labeltype)
我想要做的是将searchAttr字段"解耦" 为2个不同的字段,一个用于搜索,另一个用于在输入内显示.但是AFAICT是不可能的,我将不得不扩展FilteringSelect对象
你可以用AOP来做这种事情。请参阅dojo/aspect。
警告:向私有函数 _announceOption 添加建议。
var countryField = new FilteringSelect({
label: 'Country'
, name: 'country_id'
, searchAttr: 'name'
, labelAttr: 'label'
, store: new CountryStore()
});
aspect.around(countryField, '_announceOption', function(origFunction) {
return function(node) {
this.searchAttr = 'label'
var r = origFunction.call(this, node);
this.searchAttr = 'name'
return r;
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |