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

时间:2013-07-22 15:16:27

标签: zend-framework dojo dijit.form

我在Zend表单上一起使用dojo FilteringSelect元素,但我不能让它按照我想要的方式工作。我的商店有三个字段idlabelname。标签将用于下拉菜单,用于搜索,而name应用于框内的显示。问题是我无法找到使这种行为发挥作用的方法。

labelAttr值设置为label会在下拉列表中显示,但searchAttr属性会在选择值后控制输入框中的搜索和显示。我需要搜索label字段,因为它是许多字段的集合,但在name上显示值,是否可能?

编辑:@RichardAyotte Dijit FilteringSelect小部件使用dojo.data.store,它基本上是一个javascript对象,其中每个项目也是一个具有许多参数的对象。您可以在商店中设置两个特殊参数: labelAttr searchAttr ,这将定义一些行为。 FilteringSelect绑定到您可以搜索的INPUT框。如果您点击该框,则会打开选项列表,例如 。在这里它显示你定义为labelAttr的任何东西。现在,如果您在框中键入内容,它将使用 searchAttr 字段中定义的内容搜索商店。一旦您从列表中选择了某些内容,它也会使用标签的值显示在输入内部(您可以在此处查看http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html#displaying-rich-text-menu-labels-with-labelattr-and-labeltype

我想要做的是将 searchAttr 字段“解耦”为2个不同的字段,一个用于搜索,另一个用于在输入内显示。 AFAICT虽然不可能,但我必须扩展FilteringSelect对象

1 个答案:

答案 0 :(得分: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;
    }
})