1

私は持っていますdojox.form.CheckedMultiSelect

<span dojoType="dojo.data.ItemFileReadStore" url="..." jsId="listStore"></span>
<select id="unsubscribedList" class="soria" dojoType="dojox.form.CheckedMultiSelect" 
multiple="true" onchange="..." store="listStore" title="title"></select>

store の JSON は次のようになります。

{"items":[{"title":"ESC, MICHAEL (MESC)","value":"1000","label":"ESC, MICHAEL"},...}]
,"totalCount":7,"endList":7,"label":"label","identifier":"value","startList":1}

items.titleのために作成される各チェックボックスに HTML 属性「タイトル」として JSON から「」属性を設定するにはどうすればよいCheckedMultiSelectですか?

4

1 に答える 1

1

これを試して:

dojo.ready(function() {
    // 1.7.2 template has 'dojoxCheckedMultiSelectHidden' className on its select from template.
    // if this is different (inspect your DOM after onload), adapt the query selector
    var opts = dojo.query('.dojoxCheckedMultiSelectHidden option'),
        store = dijit.byId('listStore');
    store.fetch({ onComplete: function(items) {
       for(var i = 0; i < items.length; i++) {
          if(!opts[i]) continue; 
          else opts[i].title = store.getValue(items[i], 'title');
       }

    }});
});

それがすることは、それが

  1. ストアがサーバーからデータをロードするように強制し、items 配列を返します ( query: {id:'*'})
  2. それらを繰り返し、タイトルをオプションに配置します。

代わりに、マークアップを介してオプションを展開している場合、タイトル属性はこのウィジェットにマップされず、構成パラメーターとして許可されているマークアップのみが有効です。つまり、タイトル属性は破棄されます。ウィジェットは非常に貧弱で、dojotoolkit の残りの部分で更新されていないため、それほど柔軟ではありません。

パーサーがマークアップに対して実行されると、タイトル属性は無視されます (マークアップは破棄され、CheckedMultiSelect テンプレートに置き換えられます。 dojobase/dojox/form/resources/CheckedMultiSelect.htmlを参照してください)。

だから、解決策は - でマップされたJS配列を維持することです

// array with indexes matching the options from markup
var titles = [ "title1", "title2", "title3" ];

dojo.addOnLoad(function() {

  // note, that the '_0' is a generic ID, config options are not accepting the id attribute either
  // calling private function, again not correctly layed out
  var childObjects = dijit.byId('dojox_form_CheckedMultiSelect_0')._getChildren();

  dojo.forEach(childObjects, function(optObject, index) {
    optObject.labelNode.title = titles[index];
  });

});
于 2012-07-16T11:18:10.633 に答える