Dojo FilteringSelect加载数据

时间:2012-10-26 13:51:53

标签: javascript dojo dijit.form

我在下面有以下代码,它会创建 FilteringSelect 并设置第一个选定的项目:

// Store initialization:
var jsonStore = custom.store.JsonRest({ ... });
var memoryStore = dojo.store.Memory();
var myStore = dojo.store.Cache( jsonStore, memoryStore);
var dataStore = custom.store.MyObjStore({ objectStore: myStore, ...  });

// FilteringSelect initialization:
var fsel = new dijit.form.FilteringSelect({
             id: 'fsel',
             searchAttr: 'id',
             store: dataStore
           });

// Setting the first item on FilteringSelect, retrieved from store objects
fsel.store.fetch({ query: {id:""},
  onComplete: function (items, request) {
    var val = "";
    if (items.length>0) val = items[0].id;
    fsel.set('value', val);
  }
});
  1. 第一个问题是,如果items[0].id = 0,则此项未在FilteringSelect上设置。

  2. fsel.store.fetch({ ... })查询服务器,这没关系。问题是检索到的项目不会保留在内存中,或者它们是,但在下一个事件中不会被FilteringSelect检索。 我的意思是,当我第一次点击FilteringSelect的下拉列表时,会向服务器发送另一个查询来获取这些项目,以下时间是从内存中获取的。

  3. 有人可以帮我解决这两个问题吗?

    注意:我使用的是Dojo 1.7.2版(27913)。

1 个答案:

答案 0 :(得分:4)

在与道场的某人交谈后,我通过以下方式解决了我的问题:

  1. 切换到上一个版本( 1.8.1 ),修复了第一期。

  2. 在FilteringSelect上使用 memoryStore ,而不是缓存存储( myStore ),只会使用内存中的对象。在 myStore (缓存存储)上进行查询会将对象从服务器加载到内存。

  3. // Store initialization:
    var jsonStore = new JsonRest({ ... });
    var memoryStore = new Memory();
    var myStore = new Cache(jsonStore, memoryStore);
    // Note: ObjectStore was removed.
    
    // FilteringSelect initialization:
    var fsel = new FilteringSelect({
             id: 'fsel',
             searchAttr: 'id',
             store: memoryStore
           });
    
    // Setting the first item on FilteringSelect and loading items to memory
    when (myStore.query({id:""}),
      function (items, request) {
        var val = "";
        if (items.length>0) val = items[0].id;
        fsel.set('value', val);
      }
    );