0

Dojo ajaxを使用してドロップダウンをカスケードするためのコードをいくつか書いています。最初のドロップダウンは静的で、2番目のドロップダウンはサーブレットからデータをフェッチします..ドロップダウンを作成するためにdijit.form.ComboBoxを使用しています。Dojo は、データを保存してからコンボボックスに入れる Store プロパティを提供します。サーブレットでは、配列リストを介してajax関数に.. ajax関数では、配列をコンマで区切り、変数に格納してから、dojoのストアプロパティに格納しますしかし、文字列全体を入力することはできません..最後の文字列のみを入力します次のコードを使用している文字列の値

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

        <link rel="stylesheet" href="dojo/dijit/themes/claro/document.css">
        <link rel="stylesheet" href="dojo/dijit/themes/claro/claro.css" />
        <script src='dojo/dojo/dojo.js' data-dojo-config=' parseOnLoad: true'></script>
        <script>



            require(["dojo/parser", "dijit/form/ComboBox","dijit/form/TextBox"]);

      function abc(){    

          var j = document.getElementById('state').value
          dojo.xhrPost({
    // The URL to request
    url: "populate",   //servlet name
    timeout :  3000 ,
    content: {
        username: dojo.byId("state").value

    },

    load: function(result) {    // the value in result is like=[Abas Store, Accounts ]

    require([
    "dojo/ready", "dojo/store/Memory", "dijit/form/ComboBox"
], function(ready, Memory, ComboBox){

     var ss=result.split(",");

     var i;
     for (i=1;i< ss.length ;i++){


    var stateStore = new Memory({

        data: [ {name:ss[i], id: ss[i]}  ]
    });
     }

    ready(function(){
        var comboBox = new ComboBox({
            id: "stateSelect",
           name:"select",
            value: "Select",
            store: stateStore,
            searchAttr: "name"
        }, "stateSelect");
    });
});

      }
});
      }

        </script>
    </head>
    <body class="claro">

     <select data-dojo-type="dijit.form.ComboBox" id="state" name="state"  onchange="abc();">
    <option selected >Andaman Nicobar</option>
    <option>Andhra Pradesh</option>        
 <option>Tripura</option>
 <option>Uttar Pradesh</option>
 <option>Uttaranchal</option>
 <option>West Bengal</option>

</select>
        <input id="stateSelect"  >
                   </select>


    </body>
</html>

解決策を教えてください..配列リストから取得したコンボボックスにすべての値を入力します

4

1 に答える 1

0

for ループでストアを構築しています。代わりに、MemoryStore コンストラクターに渡されるデータ配列を作成する必要があります。

require(["dojo/store/Memory", "dijit/form/ComboBox", "dojo/ready"], 
    function(Memory, ComboBox, ready){

        ready(function) {

           dojo.connect(dijit.byId('state'), 'onChange', function() {

               var stateSelect = dijit.byId('stateSelect');
               if (!stateSelect) {
                   stateSelect = new ComboBox({
                     id: "stateSelect",
                     name:  "select",
                     value: "Select...",
                     searchAttr: "name"
                   }, "stateSelect");
               }

               var ss = 'Abas Store, Accounts';
               ss = ss.split(',');

               var data = [];
               dojo.forEach(ss, function(item, idx) {
                   data.push({
                       id: idx,
                       name: item                    
               });
               stateSelect.set('store', new Memory({data: data}));

          }); // dojo.connect
       }); // ready     
}); // require

</p>

実際の例はhttp://jsfiddle.net/cswing/DLNNc/にあります

于 2012-07-17T17:00:14.267 に答える