2014-03-26 40 views

回答

1

MemoryStore简单地持有一些任意的数据,当我需要获得最大的ID,我遍历所有元素:

var data = store.data 
var maxId = 1 
var idField = 'id' 
for (var i=0;i<data.length;i++) { 
    var row = data[i] 
    if (row[idField] && row[idField] > maxId) 
    maxId = row[idField] 
} 
+0

完美的作品!我很好奇下面这行是如何工作的:'if(row [idField] && row [idField]> maxId)'。你能详细解释一下吗? –

+0

它也适用,如果我只是做'if(row [idField]> maxId)''。 –

2

有很多方法可以做到这一点。例如,您可以进行排序基于ID的存储和获得的第一个元素,例如:

store.query({ }, { 
    sort: [{ 
     attribute: "id", 
     descending: true 
    }] 
})[0].id; 

在这个例子中它查询的所有对象的商店里面,在ID(降序)对它们进行排序。这显然意味着第一个元素具有最高的ID,所以您可以获取该项目并检索ID属性。

好处在于它只使用Dojo商店API,这意味着它可以在任何实现了dojo/store API的商店中使用,例如dojo/store/Memory


另一个解决方案是通过自己搜索ID,你可以做到这一点的方式卢卡斯在his answer做了,但是如果你使用store.data这意味着它只能与dojo/store/Memory工作,你访问属性你不应该访问。

所以要自己寻找它,你可以使用:

require([ "dojo/store/Memory", "dojo/_base/array" ], function(Memory, arrUtils) { 
    var maxId = null; 
    arrUtils.forEach(store.query({}), function(obj) { 
     if (maxId === null || (obj !== null && obj.id > maxId)) { 
      maxId = obj.id; 
     } 
    }); 
}); 

这里会发生什么事是,我经历了店内的每个对象,然后我检查是否maxIdnull(=从未设置),或者如果对象ID大于maxId,如果这是真的,那么我们用当前对象的ID替换maxId