0

私はうまく機能する次のコードを持っています....

<div dojoType="dojo.data.ItemFileReadStore" url="[% c.uri_for('/') -%]sample_name" jsId="sampleNameStore" class="invisible"></div>

<select data-dojo-type="dijit.form.ComboBox" id="sample_name" searchAttr="label" store="sampleNameStore" name="sample_name" class="selectionNav tableData"></select>

これは非常にうまく機能しますが、ComboBox がアクセスされるまでストアをメモリーにロードしないという Dojo の動作により、ComboBox が実際に選択されるまで、ComboBox にデータが取り込まれません。ページが読み込まれた後に ComboBoxes を設定したいと思います。

シンプルなワンライナーを使用して ComboBox をデータ ソースに結び付ける機能は、非常に素晴らしくシンプルです。ロード時にストアをメモリに強制する方法を知っている人はいますか?

ジャニー

4

2 に答える 2

0

キーラベルをより細かく制御できるようにするために、コンボボックスにクローン化されたメモリストアをよく使用しました。ここでは、タイトル名前にマップします。

var store = ?;
var combobox = ?; 
var data=[];
function clone(items) {
   items.forEach(function(item) { 
       data.push( {name: store.getValue(item, "title"), id: store.getValue(item, 'id')} );
   });
   combobox.set("store", new memorystore({
     data:data
   }));
}

また

store.on("load", function() { clone(store._arrayOfAllItems) });

または

 store.fetch({ onComplete: function(items) {clone(items);} });
于 2012-07-11T09:31:27.457 に答える
0

dijit.byId('sampleNameStore').fetch()すべてのデータをロードしたい場合は、空のクエリで :) store.fetch を使用してアイテムをフェッチするだけです。コンボボックスを表示する前にそれを行うと、うまくいくはずです。

于 2012-07-09T15:24:04.110 に答える