搜索值并在Dojo FilteringSelect上显示另一个值

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对象,其中每个项目也是一个具有许多参数的对象.您可以在商店中设置两个特殊参数:labelAttrsearchAttr,它们将定义一些行为.FilteringSelect绑定到您可以搜索的INPUT框.如果单击该框,它将打开选项列表,如a将.在这里它显示你定义为labelAttr的任何东西.现在,如果您在框中键入内容,它将使用searchAttr字段上定义的内容在商店中进行搜索.一旦您从列表中选择了某些内容,它也会使用标签的值显示在输入内部(您可以在此处查看http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html#displaying-富文本菜单标签与labelattr-and-labeltype)

我想要做的是将searchAttr字段"解耦" 为2个不同的字段,一个用于搜索,另一个用于在输入内显示.但是AFAICT是不可能的,我将不得不扩展FilteringSelect对象

Ric*_*tte 1

你可以用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)