强制商店进入内存(dojo 1.7)

时间:2012-07-09 15:08:26

标签: combobox dojo store

我有以下代码,效果很好....

<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之前它没有填充ComboBox,因为dojo的行为是在访问ComboBox之前不将存储加载到内存中。我希望在页面加载后填充ComboBox。

使用简单的单行代码将ComboBox绑定到数据源的能力非常棒且简单。有没有人知道在加载时强制存储进入内存的方法?

珍妮

2 个答案:

答案 0 :(得分:0)

如果要加载所有数据,只需使用dijit.byId('sampleNameStore').fetch() :) store.fetch获取带有空查询的项目。 如果你在显示组合框之前这样做,它应该可以工作。

答案 1 :(得分: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);} });