【问题标题】:Forcing a store into memory (dojo 1.7)强制存储到内存中 (dojo 1.7)
【发布时间】:2012-07-09 00:25:14
【问题描述】:

我有以下代码很好用......

<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 dojo store


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我经常为组合框使用克隆的内存库,以允许对键标签进行更多控制,例如这里将 title 映射到 name

      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);} });
      

      【讨论】:

      • 怎么样?有问题或者你有问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多