7

我在 Zend 表单上一起使用了 dojo FilteringSelect 元素,但我无法让它按我的意愿工作。我有一个包含三个字段的商店id, label, name。标签将用于下拉菜单,应用于搜索,同时name应用于框内的显示。问题是我找不到使这种行为起作用的方法。

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

编辑:@RichardAyotte Dijit FilteringSelect 小部件使用 dojo.data.store,它基本上是一个 javascript 对象,其中每个项目也是一个具有许多参数的对象。您可以在商店中设置两个特殊参数:labelAttrsearchAttr,它们将定义几个行为。FilteringSelect 绑定到一个输入框,您可以在其中进行搜索。如果单击该框,它将打开选项列表,例如将。在这里,它显示了您定义为 labelAttr 的任何内容。现在,如果您在框中键入,它将使用searchAttr字段中定义的内容在商店中搜索。一旦您从列表中选择某些内容,它还使用标签的值显示在输入中(您可以在此处查看它http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html#displaying-带有标签属性和标签类型的富文本菜单标签

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

4

1 回答 1

1

你可以用 AOP 做这种事情。见道场/方面

警告:向私有函数 _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;
    }
})
于 2013-08-02T21:51:42.327 回答