7 votes

Recherche sur une valeur et affichage d'une autre sur Dojo FilteringSelect

J'utilise l'élément FilteringSelect de dojo sur un formulaire Zend, mais je n'arrive pas à le faire fonctionner comme je le souhaite. J'ai un magasin avec trois champs id , label , name . L'étiquette sera utilisée pour la liste déroulante et devra également sera utilisé pour la recherche, tandis que name doit être utilisé pour l'affichage à l'intérieur de la boîte. Le problème est que je n'arrive pas à trouver un moyen de faire fonctionner ce comportement.

Fixer le labelAttr à la valeur label fonctionne en l'affichant dans la liste déroulante, mais l'option searchAttr régit à la fois la recherche ET l'affichage dans la zone de saisie une fois qu'une valeur est sélectionnée. J'ai besoin d'effectuer une recherche dans le label puisqu'il s'agit d'une collection de plusieurs champs, mais afficher la valeur sur name Est-ce possible ?

EDIT : @RichardAyotte Le widget Dijit FilteringSelect utilise un dojo.data.store, qui est en fait un objet javascript, où chaque élément est également un objet avec de nombreux paramètres. Vous pouvez définir deux paramètres spéciaux sur le magasin : labelAttr y searchAttr qui définira un certain nombre de comportements. Le FilteringSelect est lié à une boîte INPUT dans laquelle vous pouvez effectuer une recherche. Si vous cliquez sur la boîte, la liste d'options s'ouvrira, comme dans le cas d'un serait. Ici, il montre ce que vous avez défini comme labelAttr. Maintenant, si vous tapez sur la boîte, il y aura recherche sur le magasin, en utilisant ce qui est défini sur le site de l searchAttr champ. Il a également utilisé la valeur de l'étiquette à afficher dans le champ de saisie une fois que vous avez sélectionné quelque chose dans la liste (vous pouvez le vérifier ici). http://dojotoolkit.org/reference-guide/1.9/dijit/form/FilteringSelect.html#displaying-rich-text-menu-labels-with-labelattr-and-labeltype )

Ce que je voulais faire, c'est "découpler" la searchAttr en deux champs différents, l'un pour la recherche et l'autre pour l'affichage dans l'entrée. AFAICT ce n'est pas possible cependant, et je vais devoir étendre l'objet FilteringSelect.

1voto

Richard Ayotte Points 2066

Vous pouvez faire ce genre de choses avec AOP. Voir dojo/aspect .

avertissement : ajout d'un conseil à la fonction privée _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;
    }
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X