3 votes

Déclaration programmatique des valeurs d'un dijit.form.select

J'essaie de déclarer, par le biais d'une déclaration JSON, les options d'un widget dijit.form.Select déclaré en markup. D'après ce que j'ai lu dans la documentation de l'API, il semble que l'on puisse passer un nouveau magasin en utilisant setStore() et qu'il soit ensuite mis à jour, mais cela n'a donné aucun résultat utile, à part un widget Select vide avec un magasin complet. Je me demande s'il manque une déclaration dans mon objet, si j'utilise les mauvaises méthodes ou s'il existe d'autres moyens de déclarer ces options.

Le balisage de test que j'ai utilisé est imprimé ci-dessous :

<!DOCTYPE HTML>
<html dir="ltr">

    <head>
        <style type="text/css">
            body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"
        djConfig="parseOnLoad: true">
        </script>
        <script>
            dojo.require("dijit.form.Select");
            dojo.require("dojo.data.ItemFileReadStore");
            dojo.require("dojo.data.ItemFileWriteStore");
        </script>
        <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css" />
    </head>

    <body class=" claro ">

        <div class="option" id="option" dojoType="dijit.form.Select"></div>

        <script type="text/javascript">
            dojo.addOnLoad(function() {
                if (document.pub) {
                    document.pub();
                }

                var selectOptions = {
                    name:'selection', 
                    identifier: 'label',
                    options: [{
                        label: 'this',
                        value: '01'
                    },
                    {
                        label: 'that',
                        value: '02'
                    },
                    {
                        label: 'the other',
                        value: '03'
                    },
                    {
                        label: 'banana',
                        value: '04',
                    },
                    ]};

                    var aStore = dojo.data.ItemFileReadStore({data: selectOptions});
                    dijit.byId("option").setStore(aStore, 01);
                    dijit.byId("option").startup();

            });
        </script>
    </body>

</html>

7voto

BuffaloBuffalo Points 4020

Comme @missingno l'a mentionné, l'utilisation d'un magasin pour cela est probablement excessive. Vous pouvez simplement utiliser

dijit.form.select.addOption(/*array of options*/).

D'après votre exemple, ce serait :

var listOfOptions = [{
    label: 'this',
    value: '01'
  },
  {
    label: 'that',
    value: '02'
  },
  {
    label: 'the other',
    value: '03'
  },
  {
    label: 'banana',
    value: '04',
  },
  ];
dijit.byId("option").addOption(listOfOptions);

2voto

hugomg Points 29789

Je pense que vous avez mal initialisé votre magasin. Les options ressemblent à celles utilisées pour initialiser le simple select à la place. Essayez de faire quelque chose comme :

http://dojotoolkit.org/reference-guide/dojo/data/ItemFileReadStore.html

var store_options = {
    identifier: 'label',
    label: 'label',
    items: [
        {label: 'this', value:'01'},
        //...
    ]
}

var store = dojo.data.ItemFileWriteStore({data: store_options})

D'autre part, êtes-vous sûr de devoir utiliser un magasin pour cela ? À moins que vous ne souhaitiez utiliser une fonction particulière du magasin (comme la notification), vous pouvez simplement transmettre les données directement lorsque vous créez une sélection par programme : http://dojotoolkit.org/reference-guide/dijit/form/Select.html

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